了解飞镖瞄准镜的副作用

问题描述 投票:0回答:1

关于代码

String? newValue = maybeAString();
if ( newValue != null && newValue != _oldValue ){
    setState(() {
        _oldValue = newValue;
    });
}

错误:“字符串”类型的值?无法分配给“String”类型的变量,因为“String?”可为空且为 'String' 不是。

              _oldValue = newValue;

              ^

错误:编译失败。

编译器抱怨我无法使用

String?
分配给
String
行上的
_oldValue = newValue

在创建作用域时,可空值不应该已经被“清除”了吗?即使它稍后执行,我确实认为这可能是由于状态管理内部原因......但它的值不能改变。为什么之前的空检查还不够?

我是否误解了什么,或者这只是空保护检查的一个缺点?

flutter dart setstate
1个回答
0
投票

让我们考虑一下这个例子。我认为这是因为 newValue 可以随时在作用域中再次为 null。

这是我个人意见,不代表正确答案。

if (newValue != null && newValue != _oldValue) {
  newValue = null;

  setState(() {
    _oldValue = newValue;
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.