يأتي Flutter 3.35 ليواصل تركيزه على تحسين تجربة التطوير عبر المنصّات مع مزايا عملية طال انتظارها، خاصة على أندرويد والويب. في هذا الدليل ستجد شرحًا مفصلًا لكل جديد في إصدار Flutter 3.35، مع أمثلة بالكود قابلة للاستخدام مباشرة، بالإضافة إلى قائمة مرجعية للترقية تُجنّبك المفاجآت.
ملخص سريع للتحديث Flutter 3.35
- Android: إضافة SensitiveContent لحجب اللقطات والشاشة في البث/المشاركة عند عرض بيانات حساسة (يتطلّب Android API 35+). تغييرات edge‑to‑edge حسب سياسة أندرويد الحديثة.
- DevTools: إطلاق Widget Previewer (تجريبي) لمعاينة الودجت مباشرة، وتحسينات Flutter Property Editor لتعديل الخصائص بصريًا مع دعم الحفظ وإعادة التحميل الفوري.
- Web: تحسين موثوقية Hot Reload، ودعم التجميع إلى WebAssembly عبر أعلام Wasm لخفض زمن بدء التشغيل وتحسين الأداء.
- متطلبات الأنظمة: تحديث الحدود الدنيا لبعض الأنظمة (iOS وmacOS)، وتوافقات مع سياسات متجر Google Play واستهداف Android 15 افتراضيًا في قوالب المشاريع الحديثة.
“اقرأ أيضاً: أفضل الـ Packages في Flutter لتسريع تطوير التطبيقات“
المزايا الجديدة في Flutter 3.35 بالتفصيل
1) حماية المحتوى الحساس على أندرويد (SensitiveContent)
ما المشكلة؟ عند مشاركة الشاشة أو التقاط لقطات (screenshot) قد تظهر بيانات حساسة مثل أرقام البطاقات أو كلمات المرور.
الحل في Flutter 3.35: ودجت SensitiveContent
لتحديد مستوى حساسية المحتوى داخل شجرة الودجت. عندما تكون الميزة مدعومة (Android API 35+)، يقوم النظام بحجب الشاشة تلقائيًا أثناء البث/المشاركة.
مستويات الحساسية:
ContentSensitivity.sensitive
: أعلى أولوية — يُعامل المحتوى كحساس دومًا.ContentSensitivity.autoSensitive
: حساسية تلقائية حسب سياق النظام.ContentSensitivity.notSensitive
: غير حساس (يترك القرار للإعداد الافتراضي).
مهم: تعمل هذه الميزة حاليًا على أندرويد API 35+ فقط. على الإصدارات الأقدم والمنصّات الأخرى لن يحدث أي تغيير بصري.
مثال عملي (Dart)
import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; class SensitiveScreen extends StatelessWidget { const SensitiveScreen({super.key}); @override Widget build(BuildContext context) { return SensitiveContent( sensitivity: ContentSensitivity.sensitive, child: Scaffold( appBar: AppBar(title: const Text('دفع آمن')), body: const Padding( padding: EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('رقم البطاقة'), TextField(obscureText: true), SizedBox(height: 24), Text('CVV'), TextField(obscureText: true, maxLength: 3), ], ), ), ), ); } }
تحقّق من الدعم برمجيًا
final supported = await SensitiveContentService.isSupported(); if (!supported) { debugPrint('SensitiveContent غير مدعوم على هذا الجهاز/الإصدار'); }
أفضل ممارسات
- ضع
SensitiveContent
أعلى الشجرة لصفحات الدفع/الملف الشخصي/المحادثات الخاصة. - تجنّب الانتقال الفوري بدون انتقالات بصريّة من صفحات غير حساسة إلى صفحات حساسة؛ قد يعرض إطار واحد قبل تفعيل الحجب. استخدم انتقالًا قصيرًا.
2) معاينات الودجت Widget Previews (تجريبية)
ما هي؟ أداة جديدة في DevTools لعرض معاينة تفاعلية لأجزاء واجهتك (ودجت) خارج التطبيق الكامل. تساعدك على بناء العناصر بسرعة، وتدعم تفعيل السمات والحالات المختلفة.
المتطلبات: تفعيل DevTools، وإضافة تعليقات @Preview
أعلى الودجت أو الدالة التي تُرجع ودجت.
مثال توضيحي (Dart)
import 'package:flutter/material.dart'; @Preview() class PreviewCard extends StatelessWidget { const PreviewCard({super.key}); @override Widget build(BuildContext context) { return const Card( child: Padding( padding: EdgeInsets.all(16), child: Text('Hello Preview!'), ), ); } }
كيفية تشغيلها؟
- شغّل التطبيق في وضع التطوير:
flutter run -d chrome --wasm # للويب (اختياري Wasm) # أو على جهاز أندرويد/محاكي flutter run -d android
- افتح DevTools من أي IDE مثل (VS Code/Android Studio).
- من DevTools اختر Widget Previewer وشاهد المعاينة. يمكنك تعديل السمة/الحجم وحالات الودجت.
الميزة تجريبية؛ لا تعتمد عليها لاختبارات Golden النهائية بعد.
3) محرّر الخصائص Flutter Property Editor
أداة بصريّة ضمن DevTools تُمكّنك من تعديل خصائص الودجت مباشرة (مثل نص، ألوان، bool، enum) دون كتابة الكود يدويًا، مع دعم الحفظ وHot Reload لعرض النتيجة فورًا.
تفعيل الحفظ التلقائي والـ Hot Reload
VS Code — أضف الآتي إلى .vscode/settings.json
:
{ "files.autoSave": "afterDelay", "dart.flutterHotReloadOnSave": "all" }
Android Studio/IntelliJ — من الإعدادات: Tools → Actions on Save فعِّل حفظ الملفات، ثم Languages & Frameworks → Flutter فعِّل Perform hot reload on save.
ملاحظة: لا يدعم حاليًا تحرير الكائنات المعقّدة مثل TextStyle
وEdgeInsets
بالكامل من الواجهة؛ عدّلها في الكود عند الحاجة.
4) تحسينات الويب: Hot Reload و WebAssembly
تحسين موثوقية Hot Reload على الويب
تم تقليل حالات إعادة التحميل الكاملة وتحسين التعامل مع نقاط التوقّف؛ النتيجة دورة تطوير أسرع وثابتة.
التجميع إلى WebAssembly (Wasm)
لماذا؟ تقليل زمن بدء التشغيل وتحسين الأداء في المتصفحات الحديثة.
أوامر التشغيل والبناء
# تشغيل للتطوير مع Wasm flutter run -d chrome --wasm # بناء إصدار Production مع Wasm flutter build web --wasm --release
تذكير مهم للعناوين (Headers): عند النشر على الويب مع Wasm، احرص على إعداد رؤوس الأمان التالية في الخادم:
Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp
هذه الرؤوس مطلوبة لتمكين تشغيل Wasm بشكل آمن في أغلب البيئات.
5) تغييرات المنصّات ودعم المتاجر
- Edge‑to‑Edge على أندرويد: إذا كان تطبيقك يستهدف Android 15 (API 35) فسيعمل افتراضيًا بوضع edge‑to‑edge. إن احتجت إيقافه مؤقتًا على SDK 15:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application> <activity> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> </activity> </application> </manifest>
styles.xml
<resources> <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item> </style> <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item> </style> </resources>
تنبيه: لا يمكن إيقاف edge‑to‑edge عند استهداف Android 16+ لاحقًا؛ هاجر تصميمك في أقرب وقت.
- متطلبات Google Play: يُطلب استهداف أحدث مستوى API خلال سنة من إطلاقه. تحديثات قوالب Flutter الحديثة تستهدف Android 15 افتراضيًا ليتماشى ذلك مع سياسات المتجر.
- حدود دنيا للأنظمة: حدّث البيئة لديك إذا اعتمد مشروعك على إصدارات أقدم من iOS أو macOS. بداية من الإصدارات الحديثة من Flutter، الحد الأدنى هو عادة iOS 13.0 وmacOS 10.15 في القوالب الافتراضية والمكتبات الرسمية.
“اقرأ أيضاً: شرح عبارات break & continue في لغة دارت (Dart)“
أرقام وإحصاءات إصدار Flutter 3.35
- آلاف التغييرات عبر مئات الالتزامات (commits) من مساهمين كُثر، شملت تحسينات في الأدوات، المحرك، والمكتبات، مع إصلاحات لأخطاء مؤثرة.
خلاصة Flutter 3.35: التحديث كبير ويركّز على الجودة أكثر من الميزات الظاهرة للمستخدم النهائي.
دليل الترقية خطوة بخطوة
- انسخ نسخة احتياطية/أنشئ فرعًا:
git switch -c chore/upgrade-flutter-3-35
- حدّث Flutter إلى القناة المستقرة:
flutter upgrade flutter --version
- شغّل Doctor وصحّح المشاكل:
flutter doctor -v
- حدّث تبعيات Android: تأكّد من استهداف SDK 15، وحدّث Gradle/AGP عند الحاجة.
- راجع التصميم لـ edge‑to‑edge: إن لم تكن جاهزًا، استخدم الإعداد المؤقت في
styles.xml
كما سبق. - فعّل
SensitiveContent
في الشاشات الحساسة: وأضِف تحقّق الدعم:
final supported = await SensitiveContentService.isSupported();
- اختبر على الويب: جرّب Wasm:
flutter run -d chrome --wasm flutter build web --wasm --release
- جرّب DevTools الجديدة: Widget Previewer وProperty Editor لتحسين سرعة التجريب.
- CI/CD: ثبّت أعلام Wasm في خطوات البناء للويب إن قررت اعتمادها، وأضف رؤوس COOP/COEP في الخادم.
- إصدار نسخة بيتا للمستخدمين الداخليين وتحقق من لقطات الشاشة/المشاركة على أجهزة Android 15+.
“اقرأ أيضاً: شرح قراءة الملفات في لغة دارت (Read File In Dart)“
أسئلة شائعة حول إصدار Flutter 3.35
- هل
SensitiveContent
يعمل على iOS أو أندرويد < 35؟ حاليًا يعمل على Android API 35+ فقط؛ على غير ذلك لن ترى تأثيرًا. - هل Widget Previewer بديل لاختبارات Golden؟ لا، هي أداة تجريبية للمعاينة السريعة، بينما تظل اختبارات Golden المرجع البصري النهائي.
- هل يجب تمكين Wasm دائمًا؟ يعتمد على جمهورك وبيئة النشر؛ Wasm يمنح أداء أفضل في المتصفحات الحديثة، لكن احرص على الرؤوس الأمنية.
- محرّر الخصائص يغيّر الكود فعلًا؟ نعم، يُحدّث استدعاء المُنشئ مباشرة ويعمل مع Hot Reload.
نصائح عملية سريعة حول Flutter 3.35
- ابدأ بصفحات حساسة قليلة لتتبنّى
SensitiveContent
تدريجيًا. - اربط Widget Previewer مع أمثلة صغيرة (Widgets صغيرة) لتحصل على أسرع دورة تجريب.
- استغل Property Editor لضبط القيم البسيطة ووفّر وقت البحث عن معاملات الودجت.
- للويب: فعّل Wasm في تجارب A/B أولًا وقِس زمن التحميل.
“اقرأ أيضاً: طريقة انشاء المجلدات باستخدام كود Dart تلقائيًا“
تحديث Flutter 3.35 يراهن على أدوات مطوّرين أقوى وتجربة تطوير أسرع، مع خطوة أمنية مهمّة على أندرويد عبر SensitiveContent
، وتحسينات ملموسة لواجهات التطوير (Widget Previewer وProperty Editor) وأداء الويب عبر Wasm. باتباع دليل الترقية أعلاه ستنتقل بسلاسة وتستفيد من إصدار Flutter 3.35 فورًا. إذا ظهرت لديك أسئلة إضافية، شاركنا في تعليقات موقع عرب فلاتر أو أرسل استفسارك وسنساعدك بخطة ترحيل مناسبة لمشروعك لإصدار Flutter 3.35.