#flutter #dart
Вопрос:
Я работаю над своим проектом в флаттере, и я застрял в какой-то глупой проблеме. Я хотел бы получить список карт из Firebase, но я не могу преобразовать документ в объектный формат.
Таким образом, каждый кассовый документ идентифицируется по электронной почте пользователя. Как следствие, каждый документ будет содержать список заказов на оформление заказа, как показано на рисунке.
Это формат документа в firebase
class UserCheckoutOrderList extends Equatable { final String checkoutOrderDate; final Maplt;dynamic, dynamicgt; customerAddress; final String customerName; final String customerPhone; final String deliveryFee; final String subTotal; final String total; final Listlt;Productgt; products; const UserCheckoutOrderList( {required this.checkoutOrderDate, required this.customerAddress, required this.customerName, required this.customerPhone, required this.deliveryFee, required this.subTotal, required this.total, required this.products}); static UserCheckoutOrderList fromSnapshot(Listlt;DocumentSnapshotgt; snapshots) { final ordersList = snapshots.forEach((snapshot) { return UserCheckoutOrderList( checkoutOrderDate: snapshot['checkoutOrderDate'], customerAddress: snapshot['customerAddress'], customerName: snapshot['customerName'], customerPhone: snapshot['customerPhone'], deliveryFee: snapshot['deliveryFee'], subTotal: snapshot['subTotal'], total: snapshot['total'], products: snapshot['products']); }); return ordersList; } @override Listlt;Object?gt; get props =gt; []; }
Это то, что я до сих пор пробовал для модели.
Ответ №1:
Я настоятельно рекомендую всегда иметь при себе удостоверение личности на любом документе. Вот как нужно обрабатывать данные:
import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; @immutable class UserCheckoutOrderListEntity extends Equatable{ final String id; final String checkoutOrderDate; final Map customerAddress; final String customerName; final String customerPhone; final String deliveryFee; final String subTotal; final String total; final List products; const UserCheckoutOrderListEntity({ required this.id, required this.checkoutOrderDate, required this.customerAddress, required this.customerName, required this.customerPhone, required this.deliveryFee, required this.subTotal, required this.total, required this.products}); Maplt;String, dynamicgt; toMap() { return { 'id': id, 'checkoutOrderDate': checkoutOrderDate, 'customerAddress': customerAddress, 'customerName': customerName, 'customerPhone': customerPhone, 'deliveryFee': deliveryFee, 'subTotal': subTotal, 'total': total, 'products': products, }; } factory UserCheckoutOrderListEntity.fromMap(Maplt;String, dynamicgt; map) { return UserCheckoutOrderListEntity( id: map['id'] as String, checkoutOrderDate: map['checkoutOrderDate'] as String, customerAddress: map['customerAddress'] as Map, customerName: map['customerName'] as String, customerPhone: map['customerPhone'] as String, deliveryFee: map['deliveryFee'] as String, subTotal: map['subTotal'] as String, total: map['total'] as String, products: map['products'] as List, ); } @override Listlt;Object?gt; get props =gt; [id]; }
Затем в вашем виджете:
class CheckOut extends StatelessWidget { const CheckOut({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return FutureBuilderlt;Listlt;UserCheckoutOrderListEntitygt;gt;( future: FirebaseFirestore.instance .collection("orderCheckOut") .get() .then((query) =gt; query.docs .map((map) =gt; UserCheckoutOrderListEntity.fromMap(map.data())) .toList()), builder: (context, snapshot) { return Container(); }); } }