EdgeInsets.all(style?.p != null ? style.p : 0.0))不起作用的原因是only local variables can be type-promoted,而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));
}
3条答案
按热度按时间63lcw9qa1#
尝试一下,您可以给予可选值,如
(optionalVaribaleValue ?? DefaultValue)
,这样如果OptionalValue为空,则设置DefaultValueuelo1irk2#
EdgeInsets.all(style?.p != null ? style.p : 0.0))
不起作用的原因是only local variables can be type-promoted,而style.p
不是局部变量。因此style.p
仍然是double?
,导致条件三元表达式的求值类型也是double?
。将
style?.p
赋给局部变量可以:但正如其他人所指出的(以及the Dart linter recommends),您应该更喜欢使用专用的空操作符:
其中,由于
style?.p
不会被计算多次(避免返回不同值的可能性),因此??
可以计算为不可空类型。4bbkushb3#
您的style属性可以为空,加上p属性也可以为空,请尝试执行以下操作: