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

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

Flutter Dev

السؤال

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

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

كنت استعمل سابقا قبل الانتقال الى 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
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 2

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

  Future<bool> commit() async {


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

  }

 

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

  • 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 او مصفوفة فارغة 

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

  • 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
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 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;
    }

 

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

  • 0
بتاريخ 8 ساعات قال Nuhla Almasri:

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

dart pub outdated --mode=null-safety

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

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

كل الشكر لك

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...