关于代码
String? newValue = maybeAString();
if ( newValue != null && newValue != _oldValue ){
setState(() {
_oldValue = newValue;
});
}
错误:“字符串”类型的值?无法分配给“String”类型的变量,因为“String?”可为空且为 'String' 不是。
_oldValue = newValue;
^
错误:编译失败。
编译器抱怨我无法使用
String?
分配给 String
行上的 _oldValue = newValue
。
在创建作用域时,可空值不应该已经被“清除”了吗?即使它稍后执行,我确实认为这可能是由于状态管理内部原因......但它的值不能改变。为什么之前的空检查还不够?
我是否误解了什么,或者这只是空保护检查的一个缺点?
让我们考虑一下这个例子。我认为这是因为 newValue 可以随时在作用域中再次为 null。
这是我个人意见,不代表正确答案。
if (newValue != null && newValue != _oldValue) {
newValue = null;
setState(() {
_oldValue = newValue;
});
}