Flutter开发Dart空安全报错:无法无条件访问quantity属性如何解决
报错原因解释
报错中提到的可空receiver指的是 _items[productID] 对象。Dart的Map下标访问默认返回可空类型:即使你已经初始化了Map集合,也无法保证传入的productID一定是Map中已存在的key,访问不存在的key时会直接返回null,因此_items[productID]的类型是CartItem?,不能直接无条件访问它的quantity属性。
修复方案
你可以根据业务场景选择以下任意一种修复方式:
- 方案1:条件访问(最稳妥,无需额外判断)
修改代码为:
if (_items[productID]?.quantity == 1) _items.remove(productID);
使用?.做条件访问后,如果_items[productID]为null,整体会返回null,null和1的相等判断结果为false,不会执行移除逻辑,符合不存在的购物车项无需处理的业务逻辑。
- 方案2:先校验key存在性,再做非空断言
修改代码为:
if (_items.containsKey(productID) && _items[productID]!.quantity == 1) { _items.remove(productID); }
先通过containsKey确认productID存在于Map中,此时可以确定_items[productID]一定不为null,用!做非空断言即可。
- 方案3:业务保证key必存时直接加非空断言
如果你的业务逻辑可以100%保证执行这行代码时productID必然已存在于_items中,可以直接加非空断言:
if (_items[productID]!.quantity == 1) _items.remove(productID);
注意该方案在productID不存在时会抛出空异常,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者TheTechGuy
相关产品推荐
相关产品推荐

