حل مشكلة ظهور Native Splash المزعجة في Flutter على Android 12 بطريقة احترافية
تجربة المستخدم عند فتح التطبيق تُعد من أهم اللحظات التي تحدد الانطباع الأول عن جودة التطبيق وسلاسته. في تطبيقات Flutter، قد يلاحظ بعض المطورين ظهور شاشة بدء نظامية على Android 12 وما بعده، تحتوي على أيقونة التطبيق في المنتصف، ثم تنتقل بسرعة إلى شاشة Splash المصممة داخل Flutter.
هذا الانتقال المفاجئ قد يسبب شعورًا بالتقطّع أو الجمود، خصوصًا إذا كان التطبيق يحتوي على شاشة بداية مخصصة أو رسوم متحركة. في هذا المقال سنشرح سبب المشكلة، ولماذا قد لا تكفي الحلول التقليدية، وكيفية حلها باستخدام Transparent Launch Theme.
لماذا تظهر مشكلة Native Splash في Android 12؟
عند تشغيل تطبيق Flutter على Android، تمر عملية الإقلاع بمرحلتين أساسيتين:
- Native Splash Screen: شاشة يعرضها نظام Android فور فتح التطبيق أثناء تهيئة العملية ومحرك Flutter.
- Flutter Splash Screen: شاشة البداية التي ينشئها المطور داخل Flutter باستخدام Widgets.
ابتداءً من Android 12، أصبح النظام يفرض سلوكًا افتراضيًا لشاشة البداية، وغالبًا ما يظهر أيقونة التطبيق في المنتصف. إذا كان تصميم هذه الشاشة مختلفًا عن شاشة Flutter، تظهر قفزة بصرية غير مريحة للمستخدم.
لماذا لا يكفي استخدام flutter_native_splash فقط؟
حزمة flutter_native_splash مفيدة جدًا لإنشاء شاشة بداية ثابتة، لكنها لا تمنحك دائمًا تحكمًا كاملًا في جميع الحالات، خاصة على Android 12 وما بعده.
- لا تدعم الرسوم المتحركة بشكل حقيقي.
- قد لا تطابق الخلفيات المعقدة أو التدرجات اللونية بدقة.
- بعض الأجهزة تفرض سلوكًا افتراضيًا من النظام.
- قد تظهر الأيقونة بجودة منخفضة أو بشكل لا يناسب تصميم التطبيق.
الحل: إنشاء Transparent Launch Theme
الفكرة هنا بسيطة: بدلًا من محاولة جعل شاشة Android تطابق شاشة Flutter، نجعل شاشة الإطلاق الأصلية شفافة، ونترك التحكم الكامل لشاشة Flutter الأولى.
افتح الملف التالي:
android/app/src/main/res/values/styles.xmlثم أضف الثيم التالي:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TransparentLaunchTheme" parent="@android:style/Theme.Translucent.NoTitleBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>تعديل AndroidManifest.xml
بعد إنشاء الثيم، افتح ملف:
android/app/src/main/AndroidManifest.xmlوابحث عن:
android:theme="@style/LaunchTheme"واستبدلها بـ:
android:theme="@style/TransparentLaunchTheme"شرح الكود
Theme.Translucent.NoTitleBar
هذا الثيم يجعل نافذة الإطلاق شفافة وبدون شريط عنوان، مما يساعد على إزالة الظهور الافتراضي غير المرغوب لشاشة النظام.
windowBackground
السطر التالي هو الأهم:
<item name="android:windowBackground">@android:color/transparent</item>وهو المسؤول عن جعل خلفية نافذة التشغيل شفافة بالكامل.
backgroundDimEnabled
تعطيل التعتيم يمنع ظهور أي طبقة غامقة أو تأثير بصري قد يفسد الانتقال إلى شاشة Flutter.
ماذا عن الوضع الليلي؟
إذا كان تطبيقك يدعم Dark Mode، فتأكد من إضافة نفس الثيم داخل مجلد:
android/app/src/main/res/values-night/styles.xmlعدم تعريف الثيم في الوضع الليلي قد يجعل النظام يستخدم Theme مختلفًا، مما يؤدي إلى عودة المشكلة عند تفعيل Dark Mode.
نصائح لتحسين سرعة إقلاع تطبيق Flutter
- لا تنفذ عمليات ثقيلة داخل
main(). - استخدم
WidgetsBinding.ensureInitialized()عند الحاجة فقط. - اعتمد على Lazy Initialization للخدمات غير الضرورية.
- استخدم Isolates للمعالجة الثقيلة.
- قلل حجم الصور المستخدمة في شاشة البداية.
- راقب الأداء باستخدام Flutter DevTools.
- اختبر التطبيق على أجهزة فعلية بإصدارات Android مختلفة.
المميزات
- إزالة القفزة البصرية بين Native Splash و Flutter Splash.
- تحكم كامل في شاشة البداية داخل Flutter.
- حل مناسب للتصاميم المتحركة والمعقدة.
- تقليل ظهور الأيقونة الافتراضية في Android 12 وما بعده.
العيوب أو الملاحظات
- الشفافية لا تعالج مشاكل الأداء الداخلية في التطبيق.
- يجب تحسين التهيئة داخل Flutter لتجنب البطء الحقيقي.
- يجب الانتباه لتعريف الثيم في الوضع الليلي أيضًا.
الخلاصة
مشكلة ظهور Native Splash الافتراضية في تطبيقات Flutter على Android 12 قد تؤثر على الانطباع الأول للمستخدم، خصوصًا عند وجود شاشة بداية مخصصة داخل التطبيق. استخدام Transparent Launch Theme يمنحك حلًا عمليًا وأنيقًا لإخفاء شاشة النظام وترك التحكم الكامل لواجهة Flutter.
لكن من المهم التذكير أن هذا الحل يعالج الجانب البصري فقط، لذلك يجب دمجه مع تحسينات الأداء وتقليل العمليات الثقيلة أثناء الإقلاع لضمان تجربة استخدام سلسة واحترافية.
لمريد من المقالات البرمجيه يمكنك مشاهده : غيّر شكل تطبيقك بدون تحديث المتجر! اكتشف سر Firebase Remote Config في Flutter






