为什么 Dart 空安全问题在两个地方不一致地出现
Why are Dart null-safety problems showing up inconsistently in 2 places
我有一个 flutter 应用程序。我正在使用 VSCode。当我执行以下操作时,我在两个地方('PROBLEMS' 区域和 'Debug Console':
中报告了以下错误
错误代码:
bool fff = (preferences?.getBool("_wantSpaces"));
错误信息:
"message": "A value of type 'bool?' can't be assigned to a variable of type 'bool'.\nTry changing the type of the variable, or casting the right-hand type to 'bool'.",
如果我像这样修改代码,这两个错误都会消失:
好的代码:
bool fff = (preferences?.getBool("_wantSpaces")) ?? false;
但是,如果我像这样修改代码,只有 'Problems' 中的错误会消失:
一半好的代码:
bool fff = (preferences?.getBool("_wantSpaces"))!;
问题:
为什么报错在2处?
我更愿意使用第二种形式(带有!),但我不能
谢谢
如果您使用 shared_preferences,getBool
可以为 null,并且您将其分配给一个不可为 null 的 bool。如果你想修复你的 linting 错误,你应该让 fff
也可以为空:
bool? fff = preferences?.getBool("_wantSpaces");
或者像您之前所说的那样使用默认值:
bool fff = preferences?.getBool("_wantSpaces") ?? false;
这是因为您使用了 ?关于首选项,这意味着它可以为空。因此,如果首选项以某种方式变为 null,则 getBool 不起作用并且整个事物将为 null,但您在这里告诉编译器的是 (preferences?.getBool("_wantSpaces"))!
,这意味着整个值永远不会为 null,但事实并非如此,因为正如您定义的那样,首选项可以为空,因此整个事物有可能为空。
我有一个 flutter 应用程序。我正在使用 VSCode。当我执行以下操作时,我在两个地方('PROBLEMS' 区域和 'Debug Console':
中报告了以下错误错误代码:
bool fff = (preferences?.getBool("_wantSpaces"));
错误信息:
"message": "A value of type 'bool?' can't be assigned to a variable of type 'bool'.\nTry changing the type of the variable, or casting the right-hand type to 'bool'.",
如果我像这样修改代码,这两个错误都会消失: 好的代码:
bool fff = (preferences?.getBool("_wantSpaces")) ?? false;
但是,如果我像这样修改代码,只有 'Problems' 中的错误会消失: 一半好的代码:
bool fff = (preferences?.getBool("_wantSpaces"))!;
问题: 为什么报错在2处? 我更愿意使用第二种形式(带有!),但我不能
谢谢
如果您使用 shared_preferences,getBool
可以为 null,并且您将其分配给一个不可为 null 的 bool。如果你想修复你的 linting 错误,你应该让 fff
也可以为空:
bool? fff = preferences?.getBool("_wantSpaces");
或者像您之前所说的那样使用默认值:
bool fff = preferences?.getBool("_wantSpaces") ?? false;
这是因为您使用了 ?关于首选项,这意味着它可以为空。因此,如果首选项以某种方式变为 null,则 getBool 不起作用并且整个事物将为 null,但您在这里告诉编译器的是 (preferences?.getBool("_wantSpaces"))!
,这意味着整个值永远不会为 null,但事实并非如此,因为正如您定义的那样,首选项可以为空,因此整个事物有可能为空。