Flutter将数据列表保存到FireStore

时间:2020-10-22 17:21:53

标签: firebase flutter dart google-cloud-firestore

我有一个简单的购物车应用程序。该购物车是一个名为“ CartItem”的模型的列表。

 List<CartItem> _cart= [];

和购物车型号:

     class CartItem{
          String name;
          double singlePrice;
          double quantity;
     
   CartItem({
            this.name,
            this.singlePrice,
            this.quantity
        } );

将产品添加到购物车后,如何将整个购物车保存在Firestore中? 例如,假设我有一个OrderID。我想将每个CartItem作为OrderID集合内的文档。因此,如果用户购物车中有10件商品,那么该orderID中将有10个文档。

请帮助!我已经来这几天了! 谢谢!

1 个答案:

答案 0 :(得分:0)

Firestore中的数据只能作为Map对象发送。因此,您需要以CartItem的形式转换Map对象。

您可以通过如下创建方法toJson()来做到这一点:

class CartItem {
  String name;
  double singlePrice;
  double quantity;

  CartItem({
    this.name,
    this.singlePrice,
    this.quantity,
  });

  dynamic toJson() => {
    'name': name,
    'singlePrice': singlePrice,
    'quantity': quantity,
  };

  factory CartItem.fromJson(Map<String, dynamic> json) {
    return CartItem(
      name: json['name'],
      singlePrice: json['singlePrice'],
      quantity: json['quantity'],
    );
  }
}

通过toJson方法,您可以将CartItem对象中的Map对象转换为可以上传到Firebase的对象。

通过fromJson方法,您可以将Firebase中的数据转换回CartItem对象。

要将数据上传到Firebase,可以执行以下操作:

假设您有

List<CartItem> _cart = [ CartItem(...), CartItem(...), ...];

然后,您可以对每个对象调用toJson方法并将其上传到Firebase。

Future<void> _uploadCartToFirebase(List<CartItem> cartList) async {
  for(CartItem cartItem in cartList) {
    await FirebaseFirestore.instance.collection('OrderID').doc()
                                       .set(cartItem.toJson());
  }
}

如果您想从Firebase返回购物车列表:

Future<List<CartItem>> _getCartList() async {
  final querySnapshot = await FirebaseFirestore.instance.
                                collection('OrderID').get();
  List<QueryDocumentSnapshot> docs = querySnapshot.docs;
  final cartList = docs.map((doc) => 
                   CartItem.fromJson(doc.data())).toList();
  return cartList;
}