Как дождаться получения всех значений из снимка и создать флаттер виджета Card - PullRequest
0 голосов
/ 18 июня 2020

привет, просто пытаюсь создать приложения для отображения списка добавляемых элементов, я застрял, когда пытался проверить условие, которое, если у определенного c пользователя уже есть элементы, тогда карта не будет отображать список элементов в там. В меню отображается только элемент, которого нет у пользователя

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:galon_app/PlugIn/Item.dart';
import 'package:galon_app/pages/home.dart';
import 'package:galon_app/widget/priceCard.dart';
import 'package:galon_app/widget/progress.dart';

class ItemUser extends StatefulWidget {

  final String userId;

  ItemUser({
    this.userId
  });

  @override
  _ItemUserState createState() => _ItemUserState();
}

class _ItemUserState extends State<ItemUser> {

  Future<QuerySnapshot> itemList;

  List<Item> item = [];
  List<ItemCard> cardview = [];

  // getItemList() async{
  //   Future<QuerySnapshot> items = itemnRef.getDocuments();
  //   setState(() {
  //     itemList = items;
  //   });
  // }

  getItemList() async{
    QuerySnapshot snapshot = await itemnRef.getDocuments();
    setState(() {
      item = snapshot.documents.map((e) => Item.fromDocument(e)).toList();
    });
    for(final doc in item){
        final snap = await priceRef.document(widget.userId).collection('price').document(doc.id).get();
        print(snap.exists);
        if(!snap.exists){
              print('adding');
              cardview = snapshot.documents.map((doc) => ItemCard.fromDocument(doc, widget.userId)).toList();
            }
    }
    print(cardview.length);
  }

  @override
  void initState() {
    super.initState();
    getItemList();
  }



  buildItemList(){
    if(!cardview.isEmpty){
            return Container(
                      height: 700,
              child: ListView(
                    children: cardview,
              ),
            );
        }else{
          return Text('');
        }
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
              appBar: AppBar(
            title: Text('Add Item')),
        body: buildItemList(),
    );
  }
}

class ItemCard extends StatelessWidget {

  final String id;
  final String itemname;
  final String itemtype;
  final String imageurl;

  final String userId;

  ItemCard({
    this.id,
    this.itemname,
    this.itemtype,
    this.imageurl,
    this.userId
  });

  factory ItemCard.fromDocument(DocumentSnapshot doc, String userId){
    return ItemCard(
              id: doc['id'],
      itemname: doc['itemname'],
      itemtype: doc['type'],
      imageurl: doc['imageurl'],
      userId: userId,
    );
  }

  addItem() async{
    print('add items');
    DocumentSnapshot doc = await priceRef.document(userId).collection('price').document(id).get();
    if(!doc.exists){
          priceRef.document(userId).collection('price').document(id).setData({
                    'userid' : userId,
            'itemid' : id,
            'itemname' : itemname,
            'itemtype' : itemtype,
            'imageurl' : imageurl,
            'price' : 0
              });
        }
  }



  @override
  Widget build(BuildContext context) {
    return Container(
              height: 150,
      child: Card(
              child: Container(
                height: 200,
            child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: <Widget>[
                      Container(
                        height: 100,
                        width: 100,
                        child: AspectRatio(
                          aspectRatio: 16/9,
                          child: Container(
                            decoration: BoxDecoration(
                              border: Border.all(
                                color: Colors.grey[600],
                                width: 5
                              ),
                              image: DecorationImage(
                                fit: BoxFit.fill,
                                image: NetworkImage(imageurl)
                              )
                            ),
                          ),
                        ),
                      ),
                      SizedBox(width: 10),
                      Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: <Widget>[
                            Text(itemname,style: TextStyle(color: Colors.grey[600],fontSize: 20),),
                            Text(itemtype,style: TextStyle(color: Colors.grey[500],fontSize: 15),)
                          ],),
                          Container(
                            padding: EdgeInsets.only(left:270),
                            child: Container(
                              height: 200,
                              color: Colors.green[50],
                              child: RaisedButton(
                                onPressed: addItem,
                                child: Icon(Icons.check,color: Colors.green[50],)
                              ),
                            ),
                          )
                         ],
                        ),
                      )
                  ),
                );
              }
            }

Я создал одну демонстрацию для извлечения всего значения из снимка в коде флаттера. Но я не понял, в чем проблема с моим кодом. Если кто-нибудь может предложить решение или глубоко погрузиться в это, то это будет действительно хорошо для меня.

Я прикрепил одно изображение, с которым у меня возникла проблема.

...