在 Flutter 中,在变量类型之前使用 late 关键字或在变量类型之后使用 `?` 标记有什么区别?
What is the difference between using `late` keyword before the variable type or using `?` mark after the variable type it in the Flutter?
我认为在新的 Dart 规则中变量不能 declared/initialized 为 null。所以我们必须在变量类型之前加上一个 late
关键字,如下所示:
late String id;
或在变量类型后加一个 ?
标记,如下所示:
String? id;
这两个是相等的还是有一些区别?
当你使用 late 关键字时,当你用 ? 调用它时,你不能让变量未初始化。允许您在创建变量并调用它时让变量未初始化
可空变量在使用前不需要初始化。
默认初始化为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';
}
}
在初始化之前访问一个单词将引发运行时错误。
null 安全规则并不意味着您不能使用 null。你可以,但你应该通过添加“?”来表明变量可能具有空值。到它的类型声明。
通过 use 关键字 late 表示变量具有不可为 null 的类型,尚未初始化,但稍后会初始化。
如果尝试在初始化之前访问延迟变量的值,则会抛出异常。
我认为在新的 Dart 规则中变量不能 declared/initialized 为 null。所以我们必须在变量类型之前加上一个 late
关键字,如下所示:
late String id;
或在变量类型后加一个 ?
标记,如下所示:
String? id;
这两个是相等的还是有一些区别?
当你使用 late 关键字时,当你用 ? 调用它时,你不能让变量未初始化。允许您在创建变量并调用它时让变量未初始化
可空变量在使用前不需要初始化。
默认初始化为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';
}
}
在初始化之前访问一个单词将引发运行时错误。
null 安全规则并不意味着您不能使用 null。你可以,但你应该通过添加“?”来表明变量可能具有空值。到它的类型声明。
通过 use 关键字 late 表示变量具有不可为 null 的类型,尚未初始化,但稍后会初始化。 如果尝试在初始化之前访问延迟变量的值,则会抛出异常。