iDe*_*ode 12 dart dart-null-safety
class Foo {
int count; // Error
void bar() => count = 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么我已经在bar方法中初始化它时看到错误?如果count被标记为 ,我可以理解这个错误final。
iDe*_*ode 30
(你的代码在 Dart 2.12 之前很好,空安全)
有了空安全,Dart 无法知道你是否真的为count. Dart 可以通过三种方式看到初始化:
申报时:
int count = 0;
Run Code Online (Sandbox Code Playgroud)
在初始化形式中:
Foo(this.count);
Run Code Online (Sandbox Code Playgroud)
在初始化列表中:
Foo() : count = 0;
Run Code Online (Sandbox Code Playgroud)
因此,根据 Dart 的说法,count从未在您的代码中初始化,因此出现错误。解决方案是用上面显示的 3 种方式初始化它,或者只使用late关键字告诉 Dart 在使用它之前你将在其他时间初始化变量。
使用late关键字:
class Foo {
late int count; // No error
void bar() => count = 0;
}
Run Code Online (Sandbox Code Playgroud)
使变量可以为空:
class Foo {
int? count; // No error
void bar() => count = 0;
}
Run Code Online (Sandbox Code Playgroud)
小智 9
使用 Late 关键字在首次读取变量时(而不是创建变量时)对其进行初始化。
class Questionz {
late String questionText;
late bool questionAnswer;
Questionz({required String t, required bool a}) {
questionText = t;
questionAnswer = a;
}
}
Run Code Online (Sandbox Code Playgroud)