我已将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’must be null-checked的表达式,然后才能取消引用. 在取消引用该值之前,请try 判断该值是否不为"null".
对于Bar() {
:
必须初始化不可为空的实例字段‘_a’. try 添加初始值设定项表达式or add a field initializer in this constructor,或将其标记为"Late".
在这两种情况下,我已经完全按照错误的建议执行了操作!那是怎么回事?
我用的是dart 2.12.0-133.2.beta(12月15日星期二).
编辑:我找到了this page个,上面写着:
分析器不能对整个应用程序的流进行建模,因此它不能预测全局变量或类字段的值.
但这对我来说没有意义-在本例中,从if (_a != null)
到_a += 'a';
只有一条可能的流控制路径-没有异步代码,并且DART是单线程的-所以_a
不是本地的也没有关系.
Bar()
的错误消息明确说明了在构造函数中初始化字段的可能性.