属性 '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)
相关代码
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)