我认为在新的Dart规则中,变量不能被声明/初始化为null。所以我们必须在变量类型前加上late
关键字,如下所示:
late String id;
或者在变量类型后面加上?
标记,如下所示:
String? id;
两者相等还是有差异?
可空变量在使用之前不需要初始化。
默认初始化为null:
void main() {
String? word;
print(word); // prints null
}
关键字late可用于标记稍后将初始化的变量,即不是在声明时初始化,而是在访问时初始化。这也意味着我们可以拥有稍后初始化的非空实例字段:
class ExampleState extends State {
late final String word; // non-nullable
@override
void initState() {
super.initState();
// print(word) here would throw a runtime error
word = 'Hello';
}
}
访问一个字之前初始化将抛出一个运行时错误。
当你使用late关键字时,你不能让变量未初始化,当你用?允许你在创建变量时不初始化,并调用
Null安全规则并不意味着不能使用Null。可以这样做,但是您应该通过添加"?"来指示变量的值可能为null。到它的类型声明
通过use关键字late表示变量具有非空类型,尚未初始化,但稍后将初始化。
在初始化之前尝试访问后期变量的值将引发异常。