为什么Dart零安全问题在两个地方不一致地出现



我有一个扑动应用程序。我使用VSCode。当我执行以下操作时,我在两个地方("问题"区域和"调试控制台")报告了以下错误:

错误代码:

bool fff = (preferences?.getBool("_wantSpaces"));

错误味精:

message": " bool类型的值?'不能赋值给bool类型的变量。nTry改变变量的类型,或者将右边的类型转换为'bool'.",

如果我像这样修改代码,两个错误都消失了:好的代码:

bool fff = (preferences?.getBool("_wantSpaces")) ?? false;

但是,如果我像这样修改代码,只有"问题"中的错误会消失:半好代码:

bool fff = (preferences?.getBool("_wantSpaces"))!;

问题:为什么错误报告在2个地方?我更喜欢用第二种形式(带!),但是我不能

感谢

这是因为你使用了?这意味着它可以为空。如果preferences以某种方式变为空,getBool不起作用,整个东西将为空,但你在这里告诉编译器的是(preferences?.getBool("_wantSpaces"))!这意味着整个值永远不会为空,但这不是真的,因为preferences在你定义时是可空的因此整个东西有可能为空。

如果您正在使用shared_preferences,则getBool是可空的,并且您将其分配给不可空的bool。如果你想修复你的检查错误,你应该使fff为空,以及:

bool? fff  = preferences?.getBool("_wantSpaces");

或者使用前面所述的默认值:

bool fff  = preferences?.getBool("_wantSpaces") ?? false;

相关内容

  • 没有找到相关文章

最新更新