• 0

مشكلة Null check operator used on a null value في مكتبة easy_localization في Flutter

السلام عليكم ورحمة الله وبركاته 

تحيه طيبه للجميع

سابقا قبل الانتقال الى احدث اصدار من حزمة الترجمة  easy_localization كنت اقوم بتخزين القيمة التي ارغب بستخدامها او اللغة من خلال السطر التالي:

context.locale = Locale('en', 'US');

ولكن الان يظهر لدي ان هذا السطر قد تم تهميشه وقمت بمحاولة التخزين بشكل التالي حسب ما فهمت :

context.setLocale(Locale('en', 'US'));

ولكني احصل على المشكله التاليه :

Null check operator used on a null value

لا اعلم هل طريقة التخزين خطاء للغة ام ماذا هل يمكن الافاده لو تكرمتو 

 

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();

  runApp(Applang());
}

class Applang extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(

        localizationsDelegates: context.localizationDelegates,
        supportedLocales: context.supportedLocales,
        locale: context.locale,

    home:EasyLocalization(
      saveLocale: true,
      supportedLocales: [Locale('en', 'US'), Locale('ar', 'SA')],
      path: 'assets/translations',
      fallbackLocale: Locale('en', 'US'),
      child: Splashs(),
    )
    );
  }
}

 

تمّ تعديل بواسطة Wael Aljamal
توضيح السؤال
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1
بتاريخ 27 دقائق مضت قال مروان مروان3:

هذا الكود الذي احصل عليه بشكل عام على ما يبدو لا توجد مشكله فقط في اخطر سطر

لنحاول هذه الخطوات:

dependencies:
  easy_localization_loader:
    git:
      url: git://github.com/aissat/easy_localization_loader.git
      ref: overman-dev

ثم الأمر:

flutter pub upgrade

وأضف الحقول الناقصة من التالي:

EasyLocalization(
    supportedLocales: [Locale('en'), Locale('ar')],
    path: 'assets/translations',
    fallbackLocale: Locale('en'),
    saveLocale: false,
    useOnlyLangCode: true,
    child: Splashs(),
  )


//supportedLocales: [Locale('en', 'US'), Locale('ar', 'SA')],
//fallbackLocale: Locale('en', 'US'),
      

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

هل يمكنك تجريب تنفيذها كالتالي:

context.locale = Locale('en', 'US');

 

فهي طريقة تعامل المكتية في أحدث إصدارها وهو 3.0.0

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

هل يمكنك تجربة استخدام التالي 

locale: Locale('هنا كود اللغة'),

مثل 

locale: Locale('fa'),

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1
بتاريخ 1 دقيقة مضت قال مروان مروان3:

اهلا بك اخي لا يمكن وضعه بدون contextفي البداية 

 

لا. يمكن وضعه بدون استخدام context , ايضا يجب استخدام النسخة stable من فلاتر عن طريق الأمر التالي 

flutter channel stable 
flutter upgrade

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1
بتاريخ 4 دقائق مضت قال مروان مروان3:

استخدم احدث اصدار نعم الاخير 

آخر أمرين لتنظيف الذاكرة المؤقتة للمكتبات لتجنب تضارب في عملهم.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1
بتاريخ 6 دقائق مضت قال مروان مروان3:

هذا الكود الذي احصل عليه بشكل عام على ما يبدو لا توجد مشكله فقط في اخطر سطر


I/flutter (31611): [🌎 Easy Localization] [DEBUG] Start
I/flutter (31611): [🌎 Easy Localization] [DEBUG] Init state
I/flutter (31611): [🌎 Easy Localization] [DEBUG] Build
I/flutter (31611): [🌎 Easy Localization] [DEBUG] Init Localization Delegate
I/flutter (31611): [🌎 Easy Localization] [DEBUG] Init provider
I/flutter (31611): [🌎 Easy Localization] [WARNING] Localization key [] not found

انا على channel stable ولكن بنسبه الى فلاتر ف استخدام اول اصدار من فلاتر 2 لتجنب المشاكل التي في الاخير

لماذا لا تقوم بحفظ قيمة اللغة و من قم تقوم باستخدام Provider بجلبها سأقوم بوضع كود توضيحي لذلك 

return ChangeNotifierProvider<InitModel>(
      create: (context) => InitModel(),
      child: Consumer<InitModel>(
        builder: (context, value, child) {
          return MultiProvider(
            providers: [
              ChangeNotifierProvider(create: (_) => AuthProvider()),
              ChangeNotifierProvider(create: (_) => Cart()),
              ChangeNotifierProvider(create: (context) => OrdersProvider(),
              child: OrdersScreen(),),
              /*ChangeNotifierProxyProvider<AuthProvider, Orders>(
                create: null,
                update: (_, auth, previousOrders) => Orders(),
              ),*/
            ],
            child: StreamProvider<ConnectivityStatus>(
              initialData: null,
              create: (context) =>
              ConnectivityService().connectionStatusController.stream,
              child: MaterialApp(

                theme: value.darkMode == false ? lightMode : darkMode,
                debugShowCheckedModeBanner: false,
                localizationsDelegates: [
                  RefreshLocalizations.delegate,
                  S.delegate,
                  GlobalWidgetsLocalizations.delegate,
                  GlobalMaterialLocalizations.delegate,
                  GlobalCupertinoLocalizations.delegate,
                  DefaultCupertinoLocalizations.delegate,
                ],
                supportedLocales: S.delegate.supportedLocales,
                //locale: Locale('fa'),
                locale: Locale(value.locale),
                localeResolutionCallback:
                    (Locale locale, Iterable<Locale> supportedLocales) {
                  return locale;
                },
                initialRoute: '/splash',
                routes: <String, WidgetBuilder>{
                  "/home": (context) => HomePage(),
                  "/init": (context) => InitApp(),
                  "/splash": (context) => Splash(),
                  "/login": (context) => LoginScreen(),
                  "/register": (context) => RegisterScreen(),
                  "/wishlist": (context) => WishlistScreen(),
                  "/checkouts": (context) => HomePage(),
                  "/onboardingscreen": (context) => OnboardingScreen(),
                  "/products": (context) => Products(),
                  "/languages": (context) => Languages(),
                  "/cart": (context) => CartScreen(),
                  "/orders": (context) => OrdersScreen(),
                  "/profile": (context) => Profile(),
                  '/userPage': (context) => UserPage(),
                  '/verifyAddress': (context) => VerifyAddress(),
                },
              ),
            ),
          );
        },
      ),
    );

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 1 دقيقة مضت قال Wael Aljamal:

هل يمكنك تجريب تنفيذها كالتالي:


context.locale = Locale('en', 'US');

 

هلا بيك اخي الكريم

نعم بشكل هذا قد تم تهميش Locale التي هيا من بعد علامة =

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 5 دقائق مضت قال مروان مروان3:

نعم بشكل هذا قد تم تهميش Locale التي هيا من بعد علامة =

هل يظهر أي نص توضيحي أعلى هذه التعليمة؟ بعد وضع مؤشر الفأرة عليها أو إخطار بجانبها؟

هل تستخدم الإصدار 3 من المكتبة؟

مستبعد حدوث مشكلة أرجو تجريب التالي للتأكد من حذف أي كاش قديم قد يسبب تضارب و مشاكل:

flutter channel stable
flutter upgrade
flutter pub cache repair
flutter clean

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 3 دقائق مضت قال بلال زيادة:

هل يمكنك تجربة استخدام التالي 


locale: Locale('هنا كود اللغة'),

 

اهلا بك اخي لا يمكن وضعه بدون contextفي البداية 

لدي سوال اخي الكريم

الا توجد طريقة لوضع للغة الهاتف بشكل افتراضي ؟

للكود هذا :

       localizationsDelegates: context.localizationDelegates,
        supportedLocales: context.supportedLocales,
        locale: context.locale,

 

بتاريخ 1 دقيقة مضت قال Wael Aljamal:

هل يظهر أي نص توضيحي أعلى هذه التعليمة؟ بعد وضع مؤشر الفأرة عليها أو إخطار بجانبها؟

هل تستخدم الإصدار 3 من المكتبة؟

مستبعد حدوث مشكلة أرجو تجريب التالي للتأكد من حذف أي كاش قديم قد يسبب تضارب و مشاكل:


flutter channel stable
flutter upgrade
flutter pub cache repair
flutter clean

 

استخدم احدث اصدار نعم الاخير 

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

 

هنا تكمن المشكله :

       localizationsDelegates: context.localizationDelegates,
        supportedLocales: context.supportedLocales,
        locale: context.locale,

 

تمّ تعديل بواسطة مروان مروان3

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 1 دقيقة مضت قال Wael Aljamal:

آخر أمرين لتنظيف الذاكرة المؤقتة للمكتبات لتجنب تضارب في عملهم.

هذا الكود الذي احصل عليه بشكل عام على ما يبدو لا توجد مشكله فقط في اخطر سطر

I/flutter (31611): [🌎 Easy Localization] [DEBUG] Start
I/flutter (31611): [🌎 Easy Localization] [DEBUG] Init state
I/flutter (31611): [🌎 Easy Localization] [DEBUG] Build
I/flutter (31611): [🌎 Easy Localization] [DEBUG] Init Localization Delegate
I/flutter (31611): [🌎 Easy Localization] [DEBUG] Init provider
I/flutter (31611): [🌎 Easy Localization] [WARNING] Localization key [] not found
بتاريخ 5 دقائق مضت قال بلال زيادة:

لا. يمكن وضعه بدون استخدام context , ايضا يجب استخدام النسخة stable من فلاتر عن طريق الأمر التالي 


flutter channel stable 
flutter upgrade

 

انا على channel stable ولكن بنسبه الى فلاتر ف استخدام اول اصدار من فلاتر 2 لتجنب المشاكل التي في الاخير

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 1 ساعة قال بلال زيادة:

لماذا لا تقوم بحفظ قيمة اللغة و من قم تقوم باستخدام Provider بجلبها سأقوم بوضع كود توضيحي لذلك 


return ChangeNotifierProvider<InitModel>(
      create: (context) => InitModel(),
      child: Consumer<InitModel>(
        builder: (context, value, child) {
          return MultiProvider(
            providers: [
              ChangeNotifierProvider(create: (_) => AuthProvider()),
              ChangeNotifierProvider(create: (_) => Cart()),
              ChangeNotifierProvider(create: (context) => OrdersProvider(),
              child: OrdersScreen(),),
              /*ChangeNotifierProxyProvider<AuthProvider, Orders>(
                create: null,
                update: (_, auth, previousOrders) => Orders(),
              ),*/
            ],
            child: StreamProvider<ConnectivityStatus>(
              initialData: null,
              create: (context) =>
              ConnectivityService().connectionStatusController.stream,
              child: MaterialApp(

                theme: value.darkMode == false ? lightMode : darkMode,
                debugShowCheckedModeBanner: false,
                localizationsDelegates: [
                  RefreshLocalizations.delegate,
                  S.delegate,
                  GlobalWidgetsLocalizations.delegate,
                  GlobalMaterialLocalizations.delegate,
                  GlobalCupertinoLocalizations.delegate,
                  DefaultCupertinoLocalizations.delegate,
                ],
                supportedLocales: S.delegate.supportedLocales,
                //locale: Locale('fa'),
                locale: Locale(value.locale),
                localeResolutionCallback:
                    (Locale locale, Iterable<Locale> supportedLocales) {
                  return locale;
                },
                initialRoute: '/splash',
                routes: <String, WidgetBuilder>{
                  "/home": (context) => HomePage(),
                  "/init": (context) => InitApp(),
                  "/splash": (context) => Splash(),
                  "/login": (context) => LoginScreen(),
                  "/register": (context) => RegisterScreen(),
                  "/wishlist": (context) => WishlistScreen(),
                  "/checkouts": (context) => HomePage(),
                  "/onboardingscreen": (context) => OnboardingScreen(),
                  "/products": (context) => Products(),
                  "/languages": (context) => Languages(),
                  "/cart": (context) => CartScreen(),
                  "/orders": (context) => OrdersScreen(),
                  "/profile": (context) => Profile(),
                  '/userPage': (context) => UserPage(),
                  '/verifyAddress': (context) => VerifyAddress(),
                },
              ),
            ),
          );
        },
      ),
    );

 

كل الشكر لك اخي الكريم ولكني خبرتي شبه قليله في هذا الامر قمت بتغير الحزمة وبعض الاكود وتم حل المشكله ولله الحمد

بتاريخ منذ ساعة مضت قال Wael Aljamal:

لنحاول هذه الخطوات:


dependencies:
  easy_localization_loader:
    git:
      url: git://github.com/aissat/easy_localization_loader.git
      ref: overman-dev

ثم الأمر:


flutter pub upgrade

وأضف الحقول الناقصة من التالي:


EasyLocalization(
    supportedLocales: [Locale('en'), Locale('ar')],
    path: 'assets/translations',
    fallbackLocale: Locale('en'),
    saveLocale: false,
    useOnlyLangCode: true,
    child: Splashs(),
  )


//supportedLocales: [Locale('en', 'US'), Locale('ar', 'SA')],
//fallbackLocale: Locale('en', 'US'),
      

 

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

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن