首页 > 解决方案 > 如何使用颤振在 Firestore 中编写嵌套数组

问题描述

构建一个购物应用程序我在我的“用户”集合中添加了一个购物车项目。

购物车存放在

在用户购买这些商品后,我想将这些购物车商品存储在其他集合“订单”中。但是当我试图将这些购物车物品存储在我的订单集合中时,firebase throws Invalid data. Nested arrays are not supported

我的错误是什么?

这是我的代码

onPressed: (){
                //orderItem(cartItem);
                getData() async {
                  return await FirebaseFirestore.instance.collection('users').where('id', isEqualTo: FirebaseAuth.instance.currentUser.uid).get();
                }
                getData().then((val){
                  if(val.docs.length>0){
                    //print(val.docs[0].data()['cart']);

                   // Map map = val.docs[0].data()['cart'];
                    var list = [val.docs[0].data()['cart']];
                    // map.entries.forEach((e) {
                    //   list.add();
                    // });
                   // List items = [val.docs[0].data()['cart'].toList()];
                    FirebaseFirestore.instance.collection('orders').doc().set({
                      "userId": FirebaseAuth.instance.currentUser.uid,
                      "userName": FirebaseAuth.instance.currentUser.displayName,
                      "orders": FieldValue.arrayUnion([[val.docs[0].data()['cart']]]),
                      "price": cartController.totalCartPrice.value
                    });
                  }
                  else{
                    print("Not Found");
                  }
                });
                

              },

标签: fluttergoogle-cloud-firestore

解决方案


我认为这个问题是微不足道的。您不小心将列表放入列表中。

"orders": FieldValue.arrayUnion([[val.docs[0].data()['cart']]]),

我认为你可以跳过一对[所以你有这个:

"orders": FieldValue.arrayUnion([val.docs[0].data()['cart']]),

另外...如果val.docs[0].data()['cart']是一个列表,您可能需要跳过另一对:

"orders": FieldValue.arrayUnion(val.docs[0].data()['cart']),

推荐阅读