Как я могу загрузить отдельные данные списка в Firestore? - PullRequest
0 голосов
/ 21 апреля 2020

Может ли кто-нибудь помочь мне, как я могу загрузить отдельные данные списка просмотра в 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,
                            ),
                          ),
                        ),

                      ),


                    ),
                  ],
                ),

              ],

            ),

           );
          }
         }
       ),
       );
    }
}
...