Может ли кто-нибудь помочь мне, как я могу загрузить отдельные данные списка просмотра в Firestore в одном документе? Как и всякий раз, когда я отображаю данные из Firestore, все данные из списка будут отображаться в sizebox или контейнере. Например, у меня есть список элементов корзины, который отображается с отдельным списком ... Я хочу добавить этот элемент списка в Firestore, после чего я хочу отобразить все данные списка в одном окне или контейнере в виде истории заказов. Спасибо
Вот мой код:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutterlaundry/models/product.dart';
import 'package:flutterlaundry/pages/OrderList.dart';
import 'package:flutterlaundry/pages/home.dart';
import 'package:flutterlaundry/pages/product_details.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
class CartList extends StatefulWidget {
CartList({Key key, this.title}): super(key: key);
final String title;
@override
_CartListPageState createState() => _CartListPageState();
}
class _CartListPageState extends State<CartList> {
FirebaseAuth auth = FirebaseAuth.instance;
Future getProducts() async {
var firestore = Firestore.instance;
final FirebaseUser user = await auth.currentUser();
final email = user.email;
QuerySnapshot qn = await firestore.collection("cart").where('email',isEqualTo:"${user.email}").getDocuments();
return qn.documents;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
centerTitle: true,
elevation: 0.0,
backgroundColor: Colors.redAccent,
title: InkWell(
onTap:() { Navigator.push(context, MaterialPageRoute(builder:(context) => new HomePage())); },
child: Text('Dhopa Ghor')),
),
body: Container(
child: FutureBuilder(
future: getProducts(),
builder: (_, snapshot){
if(snapshot.connectionState == ConnectionState.waiting){
return Center(
child: Text("Loading..."),
);
}else{
return ListView.separated(
itemCount: snapshot.data.length,
separatorBuilder: (BuildContext context, int index) {
return Divider(
height: 20.0,
color: Colors.deepOrange,
);
},
itemBuilder: (_, index){
return ListTile(
subtitle: new Row(
children: <Widget>[
Column(
children: <Widget>[
Text(snapshot.data[index].data["name"],style: TextStyle(fontSize:
15,fontWeight: FontWeight.bold),),
Text(" BDT: "+snapshot.data[index].data["price"].toString(),style:
TextStyle(fontSize: 12,fontWeight: FontWeight.bold),),
],
),
Column(
children: <Widget>[
Text(" Qty: "+snapshot.data[index].data["Qty"].toString()),
Text(" Laundry:
"+snapshot.data[index].data["LaundryType"].toString()),
Text(" Delivery:
"+snapshot.data[index].data["DeliverType"].toString()),
],
),
],
),
trailing: new IconButton(
icon: new Icon(Icons.delete), onPressed: () async{
Firestore.instance.collection("cart").document(snapshot.data[index]["id"]).delete();
setState((){
});
}),
);
});
}
}),
),
bottomNavigationBar: FutureBuilder(
future: getProducts(),
builder: (__,snapshot){
if(snapshot.connectionState == ConnectionState.waiting){
return Center(
child: Text("Loading..."),
);}
else {
final sum = snapshot.data.fold(0, (prev, next) => prev + int.parse(next['price'].toString()));
return Container(
color: Colors.white,
child: Row(
children: <Widget>[
Expanded(child: ListTile(
leading: new Text("Total:",style: TextStyle(fontSize: 15,fontWeight:FontWeight.bold),),
title: Text("BDT "+sum.toString(),style: TextStyle(fontSize: 17,fontWeight:
FontWeight.bold,color:Colors.redAccent),),
)),
Row(
children: <Widget>[
Padding(
padding: const EdgeInsets.fromLTRB(
12.0, 10.0, 10.0, 10.0),
child: new SizedBox(
height: 40,
width: 120,
child: FlatButton(
hoverColor: Colors.black,
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(10.0),
),
onPressed: () {
Navigator.push(context, MaterialPageRoute(
builder: (context) => OrderList()));
},
color: Colors.redAccent,
child: Text(
"Order Now",
style: TextStyle(
color: Colors.white,
fontSize: 15.0,
),
),
),
),
),
],
),
],
),
);
}
}
),
);
}
}