以下 _CastError 被抛出构建用于空值的 Game-Null 检查运算符——Flutter

The following _CastError was thrown building Game-Null check operator used on a null value--Flutter

我对共享偏好有疑问。如何使用 Shared Preference Bool Value 进行 IF else 操作? 控制台告诉我: 以下 _CastError 被抛出构建游戏(脏,依赖项:[_LocalizationsScope-[GlobalKey#0453f],_InheritedTheme],状态:_GameState#6a56a): 用于空值的空检查运算符

我的代码:

    @override
  void initState() {
    super.initState();
 ...

    _sprache();
    _gesamtPkt();
  }
...

  @override
  void dispose() {
    super.dispose();
  }

  ///Loading counter value on start (load)
  _sprache() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      _deutsch = (prefs.getBool('deutsch') ?? true);
      print(Text("Deutsch: $_deutsch"));
    });
  }
...

PageRouteBuilder(
                                    pageBuilder:
                                        // ignore: missing_return
                                        (context, animation1, animation2) {
                                      if (_deutsch = true) return Game();
                                      return GameEN();
                                    },

导致该错误的行似乎不在代码片段中,但这也许会有所帮助:

在 Dart 中(启用空安全),有可为空和不可为空的变量:

String nonNullable = 'hello';  // OK
String nonNullable = null;  // compile time error

String? nullable = 'hello';  // OK
String? nullable = null;  // OK

nullable.length() // compile time error, `nullable` might be null

您不能对可为 null 的变量做太多事情,因为如果它为 null,则对其调用方法会出错(经典的 null 取消引用错误)。

Dart 通常非常聪明地自动在安全的可空类型和不可空类型之间进行转换:

String? maybeNull = ...  // some maybe null string
if (maybeNull != null) {
  // compiler can prove that maybeNull is non-null here
  print(maybeNull.length());  // this is allowed
}

然而,有时作为程序员,你知道一个变量是非空的,但编译器无法证明这一点。在这些情况下,您使用 ! 强制转换:

String? maybeNull = 'hello';
String notNull = maybeNull!;  // OK

String? maybeNull = null;
String uhOh = maybeNull!;  // runtime error: null-check operator used on null value

要解决您的问题,请转到错误指向的代码部分,并检查是否使用了此空值检查运算符 !。看起来它发生在一个小部件 build 方法中,因此请检查它所使用的值是否真的永远不会为 null,或者处理它为 null 的情况(也许数据尚未加载?)。