شارك المقالة
حفظ تبديل الوضع الداكن في تطبيق الأخبار باستخدام Flutter وCubit

حفظ تبديل الوضع الداكن في تطبيق الأخبار باستخدام Flutter وCubit

احفظ تبديل الوضع الداكن في Flutter باستخدام Cubit وSharedPreferences، مع قراءة الإعداد قبل التشغيل وتوضيح الفرق بين الوضع الثنائي ووضع…

حفظ تبديل الوضع الداكن في تطبيق الأخبار باستخدام Flutter وCubit يمكن أن يكون إعدادًا ثنائيًا: فاتح أو داكن. هذا المقال يركز على bool، بينما درس SharedPreferencesAsync المرتبط يشرح الاختيار الثلاثي الذي يشمل وضع النظام. تحديد الفرق يمنع الخلط بين المظهر الفعلي للجهاز واختيار المستخدم المحفوظ.

قراءة الإعداد قبل تشغيل الواجهة

بعد WidgetsFlutterBinding.ensureInitialized، أنشئ SharedPreferencesAsync واقرأ news_dark_v1، واجعل القيمة false عند غياب المفتاح. تعامل مع فشل القراءة بقرار واضح كالوضع الافتراضي ورسالة مناسبة. لا تستخدم ! لقيمة قد لا توجد، ولا تجعل نافذة التطبيق تبدأ بمظهر ثم تتغير فجأة دون قصد.

import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:shared_preferences/shared_preferences.dart';

class ThemeCubit extends Cubit<bool> {
  ThemeCubit(this.prefs, bool initial) : super(initial);
  final SharedPreferencesAsync prefs;
  bool _busy = false;
  Future<void> toggle() async {
    if (_busy || isClosed) return;
    _busy = true;
    final next = !state;
    try {
      await prefs.setBool('news_dark_v1', next);
      if (!isClosed) emit(next);
    } finally {
      _busy = false;
    }
  }
}

ربط Cubit مع MaterialApp

أنشئ ThemeCubit بالقيمة التي قرأتها، ومرر state إلى themeMode لتختار ThemeMode.dark أو ThemeMode.light. يتولى BlocBuilder إعادة بناء المظهر عند إصدار الحالة. يكتب المثال القيمة قبل إصدار الحالة الجديدة، ويمنع ضغطات متزامنة قد تحفظ اختيارًا قديمًا بعد اختيار أحدث.

إذا فشلت الكتابة فإن toggle ترمي الخطأ للمستدعي ولا تصدر نجاحًا زائفًا. التقطه في حدث الزر واعرض رسالة دون طباعة بيانات التخزين كلها. لا تجعل حدثًا في build يحفظ الإعداد باستمرار؛ الحفظ نتيجة اختيار المستخدم.

ترحيل إعداد سابق واختباره

إذا كان تطبيق منشور يستخدم مفتاح dark بالواجهة القديمة، فخطط لنقله إلى backend الجديد بدل افتراض أن الاسم الجديد يقرأ القيمة القديمة. لا تمسح كل التفضيلات عند تسجيل الخروج إن كان المظهر خاصًا بالجهاز. اختبر أول تشغيل والتبديل وإعادة الفتح وفشل التخزين والضغط السريع. إذا احتجت «تلقائي حسب النظام»، استخدم نموذج ThemeMode من الدرس الآخر بدل bool ثالث مبهم.

مراجع التنفيذ

لإكمال هذا الجزء، انتقل إلى حفظ الوضع الليلي في Flutter باستخدام SharedPreferencesAsync، ثم طبّق الربط الذي يناسب بنية مشروعك.

صور الشرح السابق

إنشاء كلاس CashHelper لتخزين بيانات الsharedPreferences كيفية حفظ البيانات داخل sharedPreferences كيفية إستدعاء البيانات من sharedPreferences وحل مشكلة Null Data . إضافة الDarkmode الى تطبيقك وحفظ التغيير في shared preferences بإستخدام Flutter
شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع