اذهب إلى المحتوى
  • 0

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

Flutter Dev

السؤال

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

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

سابقا قبل الانتقال الى احدث اصدار من حزمة الترجمة  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
توضيح السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 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 دقيقة مضت قال مروان مروان3:

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

 

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

flutter channel stable 
flutter upgrade

 

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

  • 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(),
                },
              ),
            ),
          );
        },
      ),
    );

 

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

  • 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

 

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

  • 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 لتجنب المشاكل التي في الاخير

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

  • 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'),
      

 

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

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...