flutter - 颤振方法检查是否将项目添加到firestore中的购物车
问题描述
我在检查项目是否存储在 firestore 数据库中的方法时遇到问题。
void add(BuildContext context, CartItem item) {
_items.add(item);
AuthService authService = Provider.of<AuthService>(context, listen: false);
Map<String, dynamic> cartMap = Map();
_items.forEach((CartItem item) {
cartMap['title'] = (item.product as Product).title;
cartMap['name'] = (item.product as Product).name;
});
_instance = FirebaseFirestore.instance;
_instance!
.collection('cart')
.doc(authService.getCurrentUser()) //need to get logged in account's id
.update({
'cartProduct': FieldValue.arrayUnion([cartMap])
}).then((value) {
print(_items.length);
notifyListeners();
});}
该add
方法以类似于示例图像的方式将项目添加到 Firestore。
但是,在我使用 remove 方法删除数据后,
void remove(BuildContext context, CartItem item) {
_items.remove(item);
AuthService authService = Provider.of<AuthService>(context, listen: false);
Map<String, dynamic> cartMap = Map();
// _items.forEach((CartItem item) {
cartMap['title'] = (item.product as Product).title;
cartMap['name'] = (item.product as Product).name;
// });
_instance = FirebaseFirestore.instance;
_instance!.collection('cart').doc(authService.getCurrentUser()).update({
'cartProduct': FieldValue.arrayRemove([cartMap]),
}).then((value) {
print(_items.length);
notifyListeners();
}); }
我检查数据是否添加到cartProduct
usingisProductAddedToCart
方法中,结果仍然正确。另外,当我打印时,使用该方法_items.length
后它不会减少。remove
bool isProductAddedToCart(Product? pro) {
return _items.length >= 0 ? _items.any(
(CartItem item) => item.product!.title == pro!.title) : false;
}
这是我要使用该isProductAddedToCart
方法的代码。
Consumer<CartService>(
builder: (context, cart, child) {
Widget renderedButton;
if (cart.isProductAddedToCart(widget.product) == false) {
renderedButton = DefaultButton(
text: "Participate",
press: () {
print(cart.isProductAddedToCart(widget.product));
cartService.add(context, CartItem(product: widget.product));
print(cart.isProductAddedToCart(widget.product));
},
);
} else {
renderedButton = DefaultButton(
text: "Delete",
press: () {
print(cart.isProductAddedToCart(widget.product));
cartService.remove(
context, CartItem(product: widget.product));
print(cart.isProductAddedToCart(widget.product));
},
);
}
return renderedButton;
解决方案
推荐阅读
- python - 如何从另一个函数修改函数内的列表
- user-interface - 编辑 UI 机器人框架
- cmake - 如何在 CMake 中使用 cpplint 代码样式检查?
- javascript - 等待 .then() 语句
- firebase - 来自带有 Facebook Auth 和 React Native 的 Firebase 的“回调 URL 不包含状态”错误
- jquery - Jquery Waypoints 未检测到视口
- java - 增加使用 Maven 构建时报告的 Javadoc 错误和警告的数量
- python-3.x - Beautifulsoup 用于循环和获取文本和 Href
- android - Android Studio 中的 xml 错误
- google-sheets - Google 表格:使用 QUERY 选择组内的前 N 个案例