与 Null 安全性混淆
Posted
技术标签:
【中文标题】与 Null 安全性混淆【英文标题】:Confusion with Null safety 【发布时间】:2021-12-14 00:28:18 【问题描述】:我对 Flutter 很陌生,并且由于 null 安全功能,我从在 Java 或其他语言中运行完美的代码中得到了很多错误。比如这个-
int ? i;
var icecreamFlavours = ['chocolate', 'vanilla', 'orange'];
icecreamFlavours.forEach((item)
i++; //This is where I get the error
print('We have the $item flavour');
);
我的错误信息
Error: Operator '+' cannot be called on 'int?' because it is potentially null.
i++;
Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
i++;
【问题讨论】:
i++
在循环的第一次迭代中应该做什么?使i
不可为空并首先对其进行初始化:int i = 0;
。
【参考方案1】:
您不能对可空变量执行i++
或i+=1
,因为原因很简单,空变量可以有空值,这将使增量毫无意义。
除此之外,即使您确定i
不为空,您甚至不能执行i!++
或i!+=1
。这个https://github.com/dart-lang/language/issues/1113 有一个未解决的问题
所以现在你可以这样做i = i! + 1
更新:
要使i = i! + 1
工作,您需要确保i
不为空。所以最好在使用之前初始化/分配i
一些值。
【讨论】:
i = i! + 1
不起作用,因为i
从未初始化为非空值,因此它会在第一次迭代时抛出异常。在这种情况下,更好的解决方法是将 i
初始化为非空值。
@jamesdlin 感谢您的意见。答案已更新。以上是关于与 Null 安全性混淆的主要内容,如果未能解决你的问题,请参考以下文章