[英]Dart: How do I use "optional chaining" or a default value?
试试这个,你可以给可选值,比如 (optionalVaribaleValue ?? DefaultValue) 所以如果 OptionalValue null 然后 DefaultValue 设置
EdgeInsets.all(style?.p ?? 0.0)
EdgeInsets.all(style?.p != null ? style.p : 0.0))
不起作用的原因是只有局部变量可以进行类型提升,而style.p
不是局部变量。 style.p
因此仍然是double?
,导致条件三元表达式的评估类型也是double?
.
将style?.p
分配给局部变量会起作用:
@override
void build(BuildContext context) {
var p = style?.p;
return ...
padding: EdgeInsets.all(p != null ? p : 0));
}
但正如其他人所指出的(并且正如Dart linter 所建议的那样),您应该更喜欢使用专用的 null 运算符:
padding: EdgeInsets.all(style?.p ?? 0);
在哪里,因为style?.p
不会被多次评估(避免返回不同值的可能性), ??
可以评估为不可为空的类型。
您的 style 属性可以为空,并且 p 属性也可以为空,请尝试执行以下操作:
padding: style != null
? EdgeInsets.all(style!.p != null ? style!.p! : 0.0)
: const EdgeInsets.all(0.0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.