我正在使用Dart,但我面临以下代码的空安全问题第一个我得到以下错误消息无法无条件调用方法“+”,因为接收方可以为“null”我尝试将空检查添加到目标,如下所示
cartItems.value![product]++;
bcs8qyzn1#
如果为null,则可以给予默认值。
cartItems.value[product]??0 +1
或者像这样强制assert为非空值。如果元素不在HashMap中,则可能引发异常
cartItems.value[product]!+1
在您的问题中,您AssertHashMap的非空值,而不是HashMap的值。
zc0qhyus2#
问题是cartItems.value是一个Map,而cartItems.value[product]有可能是null。在这种情况下,你不能在null中添加或删除1。所以你应该像下面这样做:
cartItems.value
cartItems.value[product]
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移到不存在的东西上,所以在这种情况下,最好抛出一个异常:
(cartItems.value[product] ?? 0)
cartItems.value[product] == null
int? currentValue = cartItems.value[product]; if (currentValue == null) { throw Exception('Trying to remove on a null object'); } cartItems.value[product] = currentValue - 1;
2条答案
按热度按时间bcs8qyzn1#
如果为null,则可以给予默认值。
或者像这样强制assert为非空值。如果元素不在HashMap中,则可能引发异常
在您的问题中,您AssertHashMap的非空值,而不是HashMap的值。
zc0qhyus2#
问题是
cartItems.value
是一个Map,而cartItems.value[product]
有可能是null
。在这种情况下,你不能在null
中添加或删除1
。所以你应该像下面这样做:使用
(cartItems.value[product] ?? 0)
,你是说如果cartItems.value[product]
是null
,则使用0。还要注意,在else子句中,当
cartItems.value[product] == null
时,你试图将1移到不存在的东西上,所以在这种情况下,最好抛出一个异常: