不可为空的实例字段必须被初始化
class Foo {
int count; // Error
void bar() => count = 0;
}
为什么我已经在bar方法中初始化它时看到错误?如果count被标记为 ,我可以理解这个错误final。
回答
(你的代码在 Dart 2.12 之前很好,空安全)
有了空安全,Dart 无法知道你是否真的为count. Dart 可以通过三种方式看到初始化:
-
申报时:
int count = 0; -
在初始化形式中:
Foo(this.count); -
在初始化列表中:
Foo() : count = 0;
因此,根据 Dart 的说法,count从未在您的代码中初始化,因此出现错误。解决方案是用上面显示的 3 种方式初始化它,或者只使用late关键字告诉 Dart 在使用它之前你将在其他时间初始化变量。
-
使用
late关键字:class Foo { late int count; // No error void bar() => count = 0; } -
使变量可以为空:
class Foo { int? count; // No error void bar() => count = 0; }