إضافة الDarkmode الى تطبيقك وحفظ التغيير في shared preferences بإستخدام Flutter

 

إضافة الDarkmode الى تطبيقك وحفظ التغيير في shared preferences بإستخدام Flutter

إضافة الDarkmode الى تطبيقك وحفظ التغيير في shared preferences بإستخدام Flutter


يعد الshared preferences نوع من انواع حفظ البيانات بشكل مبسط ويستخدم بكثرة عندما نريد حفظ تغيير بسيط او حفظ نصوص او ارقام مثال على ذلك تريد عمل شاشة لتسجيل الدخول وتريد عندما يتم ادخال البيانات بشكل صحيح يتم حفظها داخل ذاكرة الهاتف المؤقت وهذة الذاكرة تعمل بشكل اوفلاين وبعد ذلك عندما يريد فتح التطبيق لا يفتح على واجهه الاميل والرقم السري بل يتم نقله الى التطبيق بشكل مباشر وهذة هي فكرة الshared preferences حفظ التغيرات الصغيره في ذاكرة الهاتف المؤقت 


تقنية flutter واحده من التقنيات الحديثة التي احدثت ضجة كبيره في مجال ال software بسبب دعمها لاكثر من platform بكود واحد وأصبح الاقبال عليها كبير جدا ومازال العدد في زيادة وفي طبيعة الحال لابد لنا من تقديم كل جديد في مجال البرمجيات لكم بشكل مجاني بالكامل و هذا ما نسعى له وهو توفير كل ما يحتاجه المبرمجه بالمجان لكي يتمكن من تصميم وبرمجة تطبيقاته .


تعد تقنية flutter والتي تعمل بلغة Dart التي ظهرت في عام 2011 ولكن لم يكن الاقبال عليها كبير الا من بعد ظهور فلاتر في أواخر سنة ٢٠١٧ وكانت جوجل تسعى وقتها لتوحيد لغة برمجية واحده تمكن المطور من انشاء واخراج تطببق android , ios بكود واحد فقط دون الحاجه الى كتابة اكثر من كود وتعلم اكثر لغة برمجة من اجل تطوير وتصدير التطبيق .


تثبيت مكتبة shared preferences في Flutter

عليك بتثبيت المكتبة التالية داخل الملف المخصص لاضافات المكتبات في Flutter .


dependencies:
  flutter:
    sdk: flutter
shared_preferences: ^2.0.5


إنشاء كلاس CashHelper لتخزين بيانات الsharedPreferences


يتم في البداية عمل كلاس CashHelper وهو الclass الذي يتم بداخله تهيئة تشغيل الsharedPreferences وتعريفه بداخلها واضافة نوع البيانات التي تريد تخزينها سواء كانت نصوص او ارقام او boolean وهنا قمت بعمل bool مره للget والاخرى للput حيث في المره الاولى يتم اضافة مفتاح وقيمة والمره الاخرى يتم استدعاء القيمه فقط بشكل مباشر والقيمة والمفتاح يتم ادخالهم عندما تقوم بحفظ التغيير او استخدامه 


إنشاء كلاس CashHelper لتخزين بيانات الsharedPreferences

CashHelper.class



class CashHelper {
  static late SharedPreferences sharedPreferences;

  static init() async {
    sharedPreferences = await SharedPreferences.getInstance();
  }

  static Future<bool> putBoolean({
    required String key,
    required bool value,
  }) async {
    return await sharedPreferences.setBool(key, value);
  }

  static bool? getBoolean({
    required String key,
  }) {
    return sharedPreferences.getBool(key);
  }
}


كيفية حفظ البيانات داخل sharedPreferences

في هذة الحالة قمنا بعمل اختبار بسيط وهو اذا كانت هناك قيمة داخل isDark استبدلها بالقيمه الموجوده بالاعلى وهيا false واذا كانت لم يكن هناك قيمة اعكس التغيير وقم بحفظه داخل الsharedPreferences لكي يمكن استخدامه في اي مكان اخر وعليك بإعطائه key و value .


كيفية حفظ البيانات داخل sharedPreferences

cubit.dart



bool isDark = false;

  void changeMode({bool? fromShared}) {
    if(fromShared != null) {
      isDark = fromShared;
      emit(ChangeModeThemeApp());
    } else {
      isDark = !isDark;
      CashHelper.putBoolean(key: 'dark' , value: isDark ).
      then((value) {
      emit(ChangeModeThemeApp());

    });
    }
  }
  


كيفية إستدعاء البيانات من sharedPreferences وحل مشكلة Null Data .

الان داخل الmain قم بتفعيل استخدام الsharedPreferences و إضافة WidgetsFlutterBinding وهو يعني انتظر الى ان يتم تنفيذ جميع الmethode وبعدها قم بتشغيل التطبيق وحول الدالة الى Future لان القيمة التي سوف نحصل عليها مستقبليه واخيرا قم بعمل متغيير بالاسم isDark وقمنا بعمل اختبار اذا كانت القيمة فارغه اجعله false واذا لم تكن فارغه قم بوضع القيمة التي تم استخدامها داخل الsharedPreferences وارسل المتغير في myApp لكي يتم استخدامه وتشغيل التغيير مع بدء عمل التطبيق .


كيفية إستدعاء البيانات من sharedPreferences وحل مشكلة Null Data .

main.dart



  Future<void> main () async {

    // التاكد من ان جميع الmethode تعمل وبعدها يقوم بفتح التطبيق
WidgetsFlutterBinding.ensureInitialized();

Bloc.observer = MyBlocObserver();
DioHelper.init();
await CashHelper.init();

bool? isDark = CashHelper.getBoolean(key: "dark") == null ? false : CashHelper.getBoolean(key: "dark");

  runApp(MyApp(isDark!));

  }

class MyApp extends StatelessWidget {
    final bool isDark;
    MyApp(this.isDark);

  @override
  Widget build(Object context) {

    return BlocProvider(
      create: (BuildContext context)=>
      NewsCubit()
      ..changeMode(fromShared : isDark)
      (...)
      


جعل testWidgets في حالة true لحل مشكلة الWidgetsFlutterBinding


إضافة الDarkmode الى تطبيقك وحفظ التغيير في shared preferences بإستخدام Flutter

الخطوة الاخيره انتقل الى ملف widget_test وقم بجعل القيمة true لضمان عدم حدوث مشاكل اثناء العمل .


تعليقات