【发布时间】:2021-08-05 04:19:05
【问题描述】:
我已将我的 Dart 代码迁移到 NNBD / Null Safety。其中一些看起来像这样:
class Foo {
String? _a;
void foo() {
if (_a != null) {
_a += 'a';
}
}
}
class Bar {
Bar() {
_a = 'a';
}
String _a;
}
这会导致两个分析错误。对于_a += 'a';:
值可以为“null”的表达式必须先进行空值检查,然后才能取消引用。 在取消引用之前尝试检查该值是否为“null”。
对于Bar() {:
必须初始化不可为空的实例字段“_a”。 尝试添加初始值设定项表达式,或在此构造函数中添加字段初始值设定项,或将其标记为“延迟”。
在这两种情况下,我已经完全按照错误提示进行了操作!这是怎么回事?
我正在使用 Dart 2.12.0-133.2.beta(12 月 15 日星期二)。
编辑:我找到了this page,上面写着:
分析器无法对整个应用程序的流程进行建模,因此无法预测全局变量或类字段的值。
但这对我来说没有意义 - 在这种情况下,从 if (_a != null) 到 _a += 'a'; 只有一个可能的流控制路径 - 没有异步代码并且 Dart 是单线程的 - 所以没关系_a 不是本地的。
Bar() 的错误消息明确指出了在构造函数中初始化字段的可能性。
【问题讨论】:
标签: dart dart-null-safety