以下 _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 的情况(也许数据尚未加载?)。
我对共享偏好有疑问。如何使用 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 的情况(也许数据尚未加载?)。