flutter 尝试向Map元素添加值时出现dart空安全问题

ddrv8njm  于 2022-12-05  发布在  Flutter
关注(0)|答案(2)|浏览(245)

我正在使用Dart,但我面临以下代码的空安全问题
第一个
我得到以下错误消息
无法无条件调用方法“+”,因为接收方可以为“null”
我尝试将空检查添加到目标,如下所示

cartItems.value![product]++;
bcs8qyzn

bcs8qyzn1#

如果为null,则可以给予默认值。

cartItems.value[product]??0 +1

或者像这样强制assert为非空值。如果元素不在HashMap中,则可能引发异常

cartItems.value[product]!+1

在您的问题中,您AssertHashMap的非空值,而不是HashMap的值。

zc0qhyus

zc0qhyus2#

问题是cartItems.value是一个Map,而cartItems.value[product]有可能是null。在这种情况下,你不能在null中添加或删除1。所以你应该像下面这样做:

if (type == "plus") {
  cartItems.value[product] = (cartItems.value[product] ?? 0) + 1;
} else {
  cartItems.value[product] = (cartItems.value[product] ?? 0) - 1;
}

使用(cartItems.value[product] ?? 0),你是说如果cartItems.value[product]null,则使用0。
还要注意,在else子句中,当cartItems.value[product] == null时,你试图将1移到不存在的东西上,所以在这种情况下,最好抛出一个异常:

int? currentValue = cartItems.value[product];
if (currentValue == null) {
  throw Exception('Trying to remove on a null object');
}
cartItems.value[product] = currentValue - 1;

相关问题