Flutter 未处理的异常:无效参数(值):在2之前不能为null

Flutter 未处理的异常:无效参数(值):在2之前不能为null,flutter,flutter2.0,Flutter,Flutter2.0,在切换到Flatter 2之前,我使用的是SharedReferences的旧版本,没有问题,现在我有了最新版本。我能够将int类型的值存储在一个单独的类中,我从应用程序的各个方面使用该类,但是在移动和更新所有保存值的尝试后,我遇到了以下问题: [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: Invalid argument(s) (value): Must not be null E/flutter (2420

在切换到Flatter 2之前,我使用的是SharedReferences的旧版本,没有问题,现在我有了最新版本。我能够将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):  
SharedReferences类:

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



}

class-MyPreferences{
静态常量LANG=“LANG”;
静态最终MyPreferences实例=MyPreferences._internal();
静态共享引用\u共享引用;
英朗;
MyPreferences._internal(){}
factory MyPreferences()=>实例;
未来获取首选项异步{
if(_SharedReferences!=null){
返回共享引用;
}否则{
_SharedReferences=等待SharedReferences.getInstance();
lang=_sharedPreferences.getInt(lang);
返回共享引用;
}
}
Future commit()异步{
_SharedReferences???=等待SharedReferences.getInstance();
wait_sharedPreferences.setInt(LANG,LANG);
}
Future init()异步{
_sharedPreferences=等待首选项;
归还这个;
}
}

我不知道如何解决这个问题,也不知道它出现的原因。另一方面,我可以保存字符串值而没有这个问题。

您的值设置为
null
值,因此在新版本的flifter中您不能。 确保您的
lang
值不为空

Future commit()异步{
_SharedReferences???=等待SharedReferences.getInstance();
if(lang!=null){
wait_sharedPreferences.setInt(LANG,LANG);
返回true;
}
否则{//可以设置默认值或返回false;
wait_sharedreferences.setInt(LANG,1);
返回false;
}
返回false;
}

哪行代码出现了问题?请转到pubyaml文件,通过将Flatter sdk降级为2.2来禁用项目中的空安全性
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;
  }



}