属性 'quantity' 不能无条件访问,因为接收者可以是 'null'。尝试使访问有条件(使用“?”)

The property 'quantity' can't be unconditionally accessed because the receiver can be 'null'. Try making the access conditional (using '?.')

相关代码

import 'package:flutter/foundation.dart';

class CartItem {
  final String id;
  final String title;
  final int quantity;
  final double price;

  CartItem({
    required this.id,
    required this.title,
    required this.quantity,
    required this.price,
  });
}

class Cart with ChangeNotifier {
  Map<String, CartItem> _items = {}; // see that I have initialized the items

我收到空安全错误的代码'The 属性 'quantity' cannot be unconditionally accessed because the receiver can be 'null'. 尝试使访问有条件(使用“?”)或向目标(“!”)添加空检查。我得到的错误是在下面的 quantity 变量上。我不确定如何修复它。我看过谈论 int 的视频?, !和 ?: 运算符,但未涵盖此特定场景。

if (_items[productID].quantity == 1) _items.remove(productID);

补充问题,这里错误指向的receiver是什么,可以为null?

这是因为您试图通过向地图传递密钥来访问地图中的有效地图。 如果 id 作为键存在于地图中,那么您将确实拥有一个 cartitem 对象。但是如果id不存在,结果就是null,你的操作就会变成null.quantity.

此处的接收者是您的 cartitem 对象。

尝试:

_items[productID]!.quantity

这样,你向 dart 保证不可能为空。你的错误会消失,但这是一个冒险的操作。解决此问题的正确方法是在调用数量之前确保它不为空。

在你的 if 语句之前,这样做:

if (_items[productID] != null) if(_items[productID]!.quantity == 1) _items.remove(productID);

这样,您肯定不会将其放入第二个 if 语句,除非 cartitem 不为 null,100%。

试试这个,对我有用。

if (_items[productID]?.quantity != 1)