كيفية اضافة الوضع الليلي ( Dark Mode ) في Flutter وحفظ التغيير في sharedPreferences

 

كيفية اضافة الوضع الليلي ( Dark Mode ) في Flutter وحفظ التغيير في sharedPreferences

كيفية اضافة الوضع الليلي ( Dark Mode ) في Flutter وحفظ التغيير في sharedPreferences 

في سوق التطبيقات اليوم ، أصبح وجود سمة Light and Dark لتطبيقك أمرًا ضروريًا تقريبًا. نظرًا لأن المظهر الداكن أكثر راحة لأعيننا من المظهر الفاتح ، ،ولذلك فإن معظم الناس يفضلون إستخدامه عن المظهر الفاتح بشكل كبير وفي هذه المقالة ، سنوضح لك كيفية إنشاء فكرة التبديل بين الوضع الليلي والوضع الاخر داخل فلاتر وايضا سوف نقوم بحفظ القيمة داخل sharedpreferences مع استخدام الcubit بسهوله .


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


نحن تهتم في موقعنا في مساعتدكم على تعلم وتطوير تطبيقاات الاندرويد و ios باستخدام تقنية flutter وهي تقنيه حديثه مقدمه لنا من العملاق جوجل والتي تهدف وتسعى ان الى توسع علم البرمجه وتسهل على المستخدمين التعامل مع مختلف الاجهزه بلغة واحده مثل تطوير تطبيقات android , ios , embeded , desktop بلغة واحده وهذا ما يميز هذه اللغه ونسبة الوظائف بها اصبحت مطلوبه بشكل كبير عن غيرها من التقنيات ولكن في نهاية الامر هي تعد cross platform .


اضافة مكتبة hexcolor الى Flutter

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


dependencies:
  flutter:
hexcolor: ^2.0.5


تغيير مظهر التطبيق في Cubit .

في هذة الصفحة سوف نقوم بعمل تبديل بسيط جدا وهو عباره عن تغيير لشكل الايقونه ووضعية الزر ولذلك سوف نقوم بعمل function واحده لتغيير حالة التطبيق والاخرى لتبديل الايقونه المستخدمه وتكون القيمة التي نحصل عليها من الاعلى وهي القيمة التي تم تعريفها فوق .


تغيير مظهر التطبيق في Cubit .

cubit.dart


  void changeMode() {
    isDark = !isDark;
    emit(ChangeModeThemeApp());
  }

  void changeIconMode() {
    isDark = !isDark;
    emit(ChangeModeThemeApp());
  }
  


اضافة ايقونة التبديل الى الوضع الليلي في Flutter

الان داخل class layout وهو الكلاس الي يحتوي على المتغيرات الموجود في التبديل بين الصفحات سوف نقوم بعمل زر يحتوي على ايقونه وعندما يتم النقر عليه يتم تبديل الايقونه ووضعية التطبيق من النهاري الى الليلي او العكس ولكن لا تنسى تحويله الى bloc لكي تتمكن من استخدام الاكواد الموجوده في bloc ومنها احصل على وضعية التطبيق 


اضافة ايقونة التبديل الى الوضع الليلي في Flutter

NewsLayout.dart


              IconButton(onPressed: (){
                NewsCubit.get(context).changeMode();
              },
                  icon: NewsCubit.get(context).isDark ? Icon(Icons.wb_sunny) : 
                   Icon(Icons.brightness_2_outlined)) ,
                   


عمل تصميم light و dark للتطبيق في Flutter

في هذا الكلاس والذي يعد الاساسي سوف تقوم بعمل تصميم للوضع الليلي والاخر للوضع النهاري كما قمنا بعمله في الكود التالي والذي يمكنك استخدامه في التطبيق والتعديل عليه وايضا قمنا هنا بعمل الوان معينه لكل وضعية من التطبيق .


عمل تصميم light و dark للتطبيق في Flutter

main.dart



class MyApp extends StatelessWidget {
  @override
  Widget build(Object context) {

    return BlocProvider(
      create: (BuildContext context)=> NewsCubit()..getBusiness()..getSports()..getScience(),
      child: BlocConsumer<NewsCubit , NewsStates> (
        listener: (context , state) {},
        builder: (context , state) {
          return MaterialApp(
          // delete debug in app
          debugShowCheckedModeBanner: false,
          themeMode: NewsCubit.get(context).isDark ? ThemeMode.dark : ThemeMode.light,
          theme: ThemeData(
          // لون اتطبيق الرئيسي
          primarySwatch: Colors.deepOrange,
          textTheme: TextTheme(
          bodyText1: TextStyle(
          fontSize: 18 , color: HexColor('212121') , fontWeight: FontWeight.bold
          ),
          bodyText2: TextStyle( fontSize: 14 , color: HexColor('4A403A') , fontWeight: FontWeight.bold),
          ),
          floatingActionButtonTheme: FloatingActionButtonThemeData(
          backgroundColor: Colors.deepOrange,
          ),
          scaffoldBackgroundColor: Colors.white,
          appBarTheme: AppBarTheme(
          iconTheme: IconThemeData(
          color: Colors.black54
          ),
          // سماح بتغيير لون الشريط العلوي

          backwardsCompatibility: false,
          systemOverlayStyle: SystemUiOverlayStyle(
          // لون شريط الايقونات
          statusBarColor: Colors.white,
          // لون الايقونات
          statusBarIconBrightness : Brightness.dark
          ),
          titleTextStyle: TextStyle(color: Colors.black , fontSize: 18.0 , fontWeight: FontWeight.bold),
          backgroundColor: Colors.white,
          elevation: 1.0,
          ),
          bottomNavigationBarTheme: BottomNavigationBarThemeData(
          type: BottomNavigationBarType.fixed,
          elevation: 20.0,

          selectedItemColor: Colors.deepOrange,
          ),

          ),
          darkTheme: ThemeData(
          // لون اتطبيق الرئيسي
          primarySwatch: Colors.deepOrange,
          floatingActionButtonTheme: FloatingActionButtonThemeData(
          backgroundColor: Colors.deepOrange,
          ),
          scaffoldBackgroundColor: HexColor('6B4F4F'),
          appBarTheme: AppBarTheme(
          iconTheme: IconThemeData(
          color: Colors.white
          ),
          // سماح بتغيير لون الشريط العلوي

          backwardsCompatibility: false,
          systemOverlayStyle: SystemUiOverlayStyle(
          // لون شريط الايقونات
          statusBarColor: HexColor('483434'),
          // لون الايقونات
          statusBarIconBrightness : Brightness.light
          ),
          titleTextStyle: TextStyle(color: Colors.white , fontSize: 18.0 , fontWeight: FontWeight.bold),
          backgroundColor: HexColor('483434'),
          elevation: 1.0,
          ),
          bottomNavigationBarTheme: BottomNavigationBarThemeData(
          type: BottomNavigationBarType.fixed,
          backgroundColor: HexColor('483434'),
          elevation: 20.0,

          selectedItemColor: HexColor('EED6C4'),
          unselectedItemColor: HexColor('6B4F4F'),
          ),
          textTheme: TextTheme(
          bodyText1: TextStyle(
          fontSize: 18 , color: HexColor('FFF3E4') , fontWeight: FontWeight.bold
          ),
          bodyText2: TextStyle( fontSize: 14 , color: HexColor('C7BEA2') , fontWeight: FontWeight.bold),
          ),
          ),
          home: Directionality(
          textDirection: TextDirection.ltr,
          child: NewsLayout(),
          )
          );
        },
      ),

    );
  }
}


تغيير لون النص عند التبديل الى dark mode

الان ارجع الى الصفحة التي تحتوي على التصميم الخاص بك وعند النص الرئيسي اجعله يحصل على اللون من الثيم الذي قمت به لكي يتغيير لون الخط مع تغيير الثيم , حيث قمنا بعمل الوان مخصصه لكل وضعية في التطبيق .


تغيير لون النص عند التبديل الى dark mode

componant.dart


   Expanded(child: Text('${article['title']}' , maxLines: 3 , overflow: TextOverflow.ellipsis ,   style: Theme.of(context).textTheme.bodyText1)),
      Text('${article['publishedAt']}' , style: Theme.of(context).textTheme.bodyText2),
              


الان يبتقى خطوة وهيا وهي تشغيل حفظ الوضعية التي قام بها المستخدم في ذاكرة التخزين المؤقت وفتح التطبيق عليها عند البدء , ولهذا سوف نكمل معكم هذة المرحله في درس اخر وهو بعنوان كيفية حفظ الوضع الليلي في sharedPreferences يمكنك الانتقال اليه واكمال الدرس .


شرح إستخدام الStatefulWidget في Flutter وعمل تطبيق counter



تعليقات