我有一个简单的购物车应用程序。该购物车是一个名为“ 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个文档。
请帮助!我已经来这几天了! 谢谢!
答案 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;
}