Firebase Firestore FieldValue.arrayRemove 在颤动中不起作用

时间:2021-04-25 16:22:47

标签: firebase flutter google-cloud-firestore

enter image description here

我有一个名为“收藏夹”的集合,我想要的是向该集合添加和删除产品。我的添加部分正在工作,但是当我使用 FieldValue.arrayRemove 时与我在添加中使用的一样,它不起作用。这可能是什么原因?

 onPressed: () async {
                    DocumentReference ref = firestore.collection('favorites').doc(currentUser.uid);
                    DocumentSnapshot doc = await ref.get();
                    List favs = doc.data()["favs"];
                    if (favs.contains(widget.productId) == true) {
                      ref.update({
                        "favs": FieldValue.arrayRemove([
                          {
                            "productId": widget.productId,
                            "name": widget.productDetailsName,
                          }
                        ])
                      });
                    } else {
                      ref.update({
                        "favs": FieldValue.arrayUnion([
                          {
                            "productId": widget.productId,
                            "name": widget.productDetailsName,
                          }
                        ])
                      });
                    }
                  }

1 个答案:

答案 0 :(得分:0)

我用 for 循环解决了它。我一一检查收藏夹中是否存在产品ID。如果是,则删除它

onPressed: () async {
                    DocumentReference ref =
                        firestore.collection('favorites').doc(currentUser.uid);
                    DocumentSnapshot doc = await ref.get();
                    List favs = doc.data()["favs"];
                    liked = !liked;
                    int count = 0;
                    for (int i = 0; i < favs.length; i++) {
                      if (favs[i]["productId"] == widget.productId) {
                        ref.update({
                          "favs": FieldValue.arrayRemove([
                            {
                              "productId": widget.productId,
                              "name": widget.productDetailsName,
                              "image": widget.productDetailsImage,
                              "price": widget.productDetailsPrice,
                            }
                          ])
                        });
                        count = 1;
                        break;
                      }
                    }
                    if (count == 0) {
                      ref.update({
                        "favs": FieldValue.arrayUnion([
                          {
                            "productId": widget.productId,
                            "name": widget.productDetailsName,
                            "image": widget.productDetailsImage,
                            "price": widget.productDetailsPrice,
                          }
                        ])
                      });
                    }
                  },