• 0

Unhandled Exception: Invalid argument(s) (value): Must not be null

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

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

كنت استعمل سابقا قبل الانتقال الى flutter 2  اصدار قديم من SharedPreferences الان لدي احدث اصدار منه

كنت استطيع تخزين قيم من نوع int  في كلاس منفصل استعمله من جميع جوانب التطبيق ولكن بعد الانتقال وتحديث كل ما حاولت القيام بحفظ القيم تظهر لدي المشكله التاليه:

[ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: Invalid argument(s) (value): Must not be null
E/flutter (24208): #0      ArgumentError.checkNotNull (dart:core/errors.dart:185:27)
E/flutter (24208): #1      SharedPreferences._setValue (package:shared_preferences/shared_preferences.dart:147:19)
E/flutter (24208): #2      SharedPreferences.setString (package:shared_preferences/shared_preferences.dart:133:7)
E/flutter (24208): #3      MyPreferences.commit (package:Hasa/MyPreferences.dart:114:30)
E/flutter (24208): #4      _SettingsPageState._handleRadioValueChange.<anonymous closure> (package:Hasa/Settings.dart:149:26)
E/flutter (24208): #5      State.setState (package:flutter/src/widgets/framework.dart:1267:30)
E/flutter (24208): #6      _SettingsPageState._handleRadioValueChange (package:Hasa/Settings.dart:132:5)
E/flutter (24208): #7      _RadioState._handleChanged (package:flutter/src/material/radio.dart:404:24)
E/flutter (24208): #8      RenderToggleable._handleTap (package:flutter/src/material/toggleable.dart:440:19)
E/flutter (24208): #9      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (24208): #10     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:607:11)
E/flutter (24208): #11     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
E/flutter (24208): #12     BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:267:7)
E/flutter (24208): #13     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
E/flutter (24208): #14     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:385:20)
E/flutter (24208): #15     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:361:22)
E/flutter (24208): #16     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:278:11)
E/flutter (24208): #17     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:316:7)
E/flutter (24208): #18     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:280:5)
E/flutter (24208): #19     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:238:7)
E/flutter (24208): #20     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:221:7)
E/flutter (24208): #21     _rootRunUnary (dart:async/zone.dart:1370:13)
E/flutter (24208): #22     _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter (24208): #23     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter (24208): #24     _invoke1 (dart:ui/hooks.dart:180:10)
E/flutter (24208): #25     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:276:7)
E/flutter (24208): #26     _dispatchPointerDataPacket (dart:ui/hooks.dart:96:31)
E/flutter (24208): 

 

 

طريقة الحفظ كانت كالتالي:

  void _handleRadioValueChange(int value) {
    _radioValue = value;
    setState(() {
      switch (_radioValue) {
        case 1:
          SaveLang=1;
          context.locale = Locale('en', 'US');
   
          _myPreferences.lang = SaveLang;
          _myPreferences.commit();
    
          break;
        case 2:
          SaveLang=2;
          context.locale = Locale('ar', 'SA');
          _myPreferences.lang = SaveLang;
          _myPreferences.commit();
          break;

      }
    });

  }

اما كلاس الحفظ فهو كالتالي:




class MyPreferences {

  static const LANG = "lang";


  static final MyPreferences instance = MyPreferences._internal();

  static SharedPreferences _sharedPreferences;


  int lang;





  MyPreferences._internal() {}

  factory MyPreferences() => instance;

  Future<SharedPreferences> get preferences async {

    if (_sharedPreferences != null) {
      return _sharedPreferences;
    } else {

      _sharedPreferences = await SharedPreferences.getInstance();

      lang = _sharedPreferences.getInt(LANG);
 



      return _sharedPreferences;
    }
  }

  Future<bool> commit() async {


    _sharedPreferences ??= await SharedPreferences.getInstance();

    await _sharedPreferences.setInt(LANG, lang);
 

  }
  Future<MyPreferences> init() async {
    _sharedPreferences = await preferences;
    return this;
  }



}

 

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

تمّ تعديل بواسطة مروان مروان3
1 شخص أعجب بهذا

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


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

تمام الموضوع ما زال متعلق بال NULL ارجو القيام بفحص قيمة lang قبل ارسالها الى الدالة sharedPreferences.setInt فتمرير قيمة NULL الى اي دالة قد يؤدي الى نفس المشكلة في حال لم تقم بتعريف قيمة مبدأية لها init value هنا:

  Future<bool> commit() async {


    _sharedPreferences ??= await SharedPreferences.getInstance();
// عليك فحص اي قيمة يتم ارسالها الى أي دالة بالنسخة الجديدة حتى يتم اعتبار ان البرنامج لن  يحتوي اي قيمة
    // null
    await _sharedPreferences.setInt(LANG, lang);
 

  }

 

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

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


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

نعم الشيرد بريفيرنسز ان لم يكن هناك اي شيئ مخزن بالذاكرة سيكون قيمتها null و انت تستخدم flutter 2  اي نسخة null safty  مما يعني انك يجب ان تضمن عدم وجود اي قيمة داخل برنامجك يحتوي قيمة null لتفادي هذه الأخطاء يوجد أداه لتقوم بإصلاح أصدار برنامجك قبل النسحة الجديدة , و ذلك بعمل تحديث لجميع المكتبات لضمان انها ستحتوي على هذه الخاصية 

يمكنك ان تقوم بعمل  

dart pub outdated --mode=null-safety

dart pub upgrade --null-safety

flutter pub get

flutter analyze

dart migrate

و عندما تقوم بعمل ال migration  ينبغي ان يقوم بتحديث جميع المكتبات يحيث أن القيمة الراجعه لاي شئ لن يحتوي على  null ممكن Zero او مصفوفة فارغة 

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

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


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

هل يمكنك أن ترسل لي شاشة الكونسل بعد أمر

dart pub outdated --mode=null-safety

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

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 12 ساعات قال Nuhla Almasri:

نعم الشيرد بريفيرنسز ان لم يكن هناك اي شيئ مخزن بالذاكرة سيكون قيمتها null و انت تستخدم flutter 2  اي نسخة null safty  مما يعني انك يجب ان تضمن عدم وجود اي قيمة داخل برنامجك يحتوي قيمة null لتفادي هذه الأخطاء يوجد أداه لتقوم بإصلاح أصدار برنامجك قبل النسحة الجديدة , و ذلك بعمل تحديث لجميع المكتبات لضمان انها ستحتوي على هذه الخاصية 

يمكنك ان تقوم بعمل  


dart pub outdated --mode=null-safety

dart pub upgrade --null-safety

flutter pub get

flutter analyze

dart migrate

و عندما تقوم بعمل ال migration  ينبغي ان يقوم بتحديث جميع المكتبات يحيث أن القيمة الراجعه لاي شئ لن يحتوي على  null ممكن Zero او مصفوفة فارغة 

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

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

 

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

تمّ تعديل بواسطة مروان مروان3
1 شخص أعجب بهذا

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 5 ساعات قال Nuhla Almasri:

تمام الموضوع ما زال متعلق بال NULL ارجو القيام بفحص قيمة lang قبل ارسالها الى الدالة sharedPreferences.setInt فتمرير قيمة NULL الى اي دالة قد يؤدي الى نفس المشكلة في حال لم تقم بتعريف قيمة مبدأية لها init value هنا:


  Future<bool> commit() async {


    _sharedPreferences ??= await SharedPreferences.getInstance();
// عليك فحص اي قيمة يتم ارسالها الى أي دالة بالنسخة الجديدة حتى يتم اعتبار ان البرنامج لن  يحتوي اي قيمة
    // null
    await _sharedPreferences.setInt(LANG, lang);
 

  }

 

اهلا بك اختي

افهم من كلامك انا حاليا مجبور حتى لو كنت املك خمسة اسطر مثلا لحفظ القيم اني مجبور اتحقق واحد واحد منهم بطريقة التاليه :

if(LANG  != null){
      await _sharedPreferences.setInt(LANG, lang);
      return true;
    } else if .....

} else if .....


} else if .....

الا يمكن اختصار هذا الطريقة ؟ قمت بتجربة كالتالي ولكن لم تنجح  :

if(_sharedPreferences  != null){
      await _sharedPreferences.setInt(LANG, lang);
      return true;
    }

 

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

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 8 ساعات قال Nuhla Almasri:

هل يمكنك أن ترسل لي شاشة الكونسل بعد أمر

dart pub outdated --mode=null-safety

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

قمت بتغير ملف الشير _sharedPreferences بالكامل وتم حل المشكله حسب الحل الذي اشرتي له سابقا يجب ان يتم التحقق فعلا في البدايه

كل الشكر لك

تمّ تعديل بواسطة مروان مروان3
1 شخص أعجب بهذا

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


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

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

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

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


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

تسجيل الدخول

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


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