首页 > 解决方案 > Flutter future builder完成后什么都不显示-firestore

问题描述

我正在尝试显示基于 Firestore 数据库的未来构建器,但现在我得到的只是完成循环进度指示器后的空白屏幕。

任何帮助将不胜感激。

火库功能:

Future<List<Item>> getFavourites() async{
List<Item> _itemList= [];
  var firebaseUser=await FirebaseAuth.instance.currentUser();
  Firestore.instance.collection("users").document(firebaseUser.uid).get().then((querySnapshot){
    List value = querySnapshot.data["favourites"];
    if(value.length>0){
      value.forEach((element) {
        Firestore.instance.collection("items").document(element).get().then((value){
          Item item= Item.fromMap(value.data);
          _itemList.add(item);
        });
      });

    }

  });

  return _itemList;
  }

未来建造者:

FutureBuilder(
        future: getFavourites(),
        builder:(BuildContext context,AsyncSnapshot<List<Item>> snapshot){
          if(snapshot.connectionState!=ConnectionState.waiting){

            //print(snapshot.data[0].name);

            return
              ListView(
                children: <Widget>[
                  SizedBox(height: 10.0),
                  Text(
                    "Favorites",
                    style: TextStyle(
                      fontSize: 23,
                    ),
                  ),
                  SizedBox(height: 10.0),

                  GridView.builder(
                    shrinkWrap: true,
                    primary: false,
                    physics: NeverScrollableScrollPhysics(),
                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                      crossAxisCount: 2,
                      childAspectRatio: MediaQuery.of(context).size.width /
                          (MediaQuery.of(context).size.height / 1.25),
                    ),
                    itemCount: snapshot.data == null ? 0 :snapshot.data.length,
                    itemBuilder: (BuildContext context, int index) {
                      return GridItem(
                        img: snapshot.data[index].img,
                        name: snapshot.data[index].name,
                        category: snapshot.data[index].category,
                        id: snapshot.data[index].id,
                      );
                    },
                  ),

                  SizedBox(height: 30),
                ],
              );
          }
          else{
            return Center(
              child: CircularProgressIndicator(),
            );
             }
          }
    ),

'Item' 是一个包含所有变量的类,就像在 firestore 集合中一样。

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


使用以下方法:

Future<List<Item>> getFavourites() async{
List<Item> _itemList= [];
  var firebaseUser= await FirebaseAuth.instance.currentUser();
  DocumentSnapshot snapshot = await Firestore.instance.collection("users").document(firebaseUser.uid).get();
    List value = snapshot.data["favourites"];
    if(value.length>0){
      value.forEach((element) async{
        DocumentSnapshot docSnapshot  = await Firestore.instance.collection("items").document(element).get();
          Item item= Item.fromMap(docSnapshot.data);
          _itemList.add(item);
      });
    }
  return _itemList;
  }

FutureBuilder使用中:

if(snapshot.connectionState==ConnectionState.done){

推荐阅读