Dart - null 感知运算符,为啥!需要吗? [复制]
Posted
技术标签:
【中文标题】Dart - null 感知运算符,为啥!需要吗? [复制]【英文标题】:Dart - null aware operator, why ! is needed? [duplicate]Dart - null 感知运算符,为什么!需要吗? [复制] 【发布时间】:2021-05-10 14:05:22 【问题描述】:我们有:
final Widget? body;
稍后在代码中:
final content = Column(
children: [
...items,
if (body != null) body!
],
);
为什么我必须在正文后添加!
符号?
没有!
我收到:
元素类型'Widget?'不能分配给列表类型“Widget”。
在 pubspec.yaml 中
environment:
sdk: '>=2.12.0-0 <3.0.0'
【问题讨论】:
【参考方案1】:变量或函数后面的感叹号表示将可空变量或函数转换为不可空值。因为您可能知道小部件不能为空。
const insets = EdgeInsets.all(10.0);
Widget? widget1 = insets;
Widget widget2 = insets;
assert(widget1! == widget2);
【讨论】:
这很明显。仔细看看,在代码中,我问 body 是否为空 -if (body != null) body!
。对我来说,这应该足够了:if (body != null) body
,因为我已经问过 body 是否为空
不,还不够。因为变量是 nullable (Widget?) 但你需要 Widget。所以它类似于类型转换。编译器也会警告你。在 c# 中也有int var = (int)Nullable<int>(1);
以上是关于Dart - null 感知运算符,为啥!需要吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章