首页 > 解决方案 > 颤振方法检查是否将项目添加到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();
    }); }

我检查数据是否添加到cartProductusingisProductAddedToCart方法中,结果仍然正确。另外,当我打印时,使用该方法_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;

标签: fluttergoogle-cloud-firestore

解决方案


推荐阅读