我是新来的飞镖和Flutter。
在dart中,对可空类型使用?和!有什么区别?
validator: ((value) {
if (value?.isEmpty) {
return "Field is required";
}
return null;
}),
validator: ((value) {
if (value!.isEmpty) {
return "Field is required";
}
return null;
}),
提前感谢!
3条答案
按热度按时间w8f9ii691#
关于它的好主题:What is Null Safety in Dart?
但简而言之,当您希望允许值为null并相应地使用它时,可以使用“?”,如下所示:
当您希望确保具有不可为空的值时,请使用“!”,如下所示:
vd8tlhqk2#
两者之间的差异,一个可以初始为空,但另一个不能。
我希望你在下面的例子中理解。
要指定变量是否可以为空,那么可以使用可空类型?
运算符,让我们看一个示例:
**注意:**您不需要在使用可为null的变数之前先将它初始化。预设会将它初始化为null。
判断提示运算子(!)
使用空Assert运算符(!)使Dart将可为空的表达式视为不可为空的表达式(如果您确定它不为空)。
在上面的示例中,我们告诉Dart变量someValue为空,将其赋值给不可为空的变量(即data)是安全的
我希望你能理解????
至于你的例子;
如果你注意到了,验证器{String?value}的值最初可以是null。2但是在你写的代码中,两者之间的唯一区别是运行成本。3 '?'当你再次定义它时,它会花费一些时间。4因为它已经在函数中声明了它将是null作为开始。
gab6jxml3#
这是一个很好的问题,这里的答案是"person“。例如,”?"表示它将在以后获得值,或者它可以为空(最初或在任何情况下)
字符串?carName;
1.'!'表示您将接收值,且该值不能为空。它将检查该值,如果该值为空,则将给予异常。
请看下面例子,以了解它们之间的明显区别:
列表?块;...//您不确定块变量是否已初始化。//块可以为空。final Block?block = blocks?.first;
//您确定blocks变量已初始化。//块不可为空。final Block block = blocks!.first;
希望你得到它,如果是接受答案或评论我,如果你有问题