【问题标题】:Flutter future builder displaying nothing after finishing - firestoreFlutter future builder完成后什么都不显示-firestore
【发布时间】:2020-06-13 18:34:28
【问题描述】:

我正在尝试显示基于 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 :

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 集合中一样。

【问题讨论】:

  • 在最后一个then 的末尾返回_itemList 或使用await 代替'then()'
  • Firestore.instance.collection("users").document(firebaseUser.uid).get() 这将返回一个未来。因此,您的 return 语句 return _itemList; 在您的 then() 中发生的所有计算之前被调用。本质上,您的快照数据是空列表。请像 @SanjaySharma 所说的那样使用 await。
  • 如何修改为等待?抱歉,我是 Firestore 的新手。 @PrasannaKumar
  • var querySnapshot = await Firestore.instance.collection("users").document(firebaseUser.uid).get(); items 查询也是如此

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

使用以下方法:

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){

【讨论】:

  • 是的,伙计,对不起
  • 您是否尝试调试它.. 添加断点并检查发生了什么
  • 函数没有返回任何东西(null)。
  • 那么就没有数据了..把你的数据库截图加到问题里
  • 有数据,我可以在forEach方法里面打印_itemList[0].name,但是外面不行。
【解决方案2】:

您是否尝试过检查:

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

而不是

if(snapshot.connectionState!=ConnectionState.waiting){

?

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 2020-11-01
    • 1970-01-01
    • 2021-03-04
    • 2019-08-07
    • 2019-05-10
    • 2020-08-04
    • 2020-07-02
    • 2020-09-13
    相关资源
    最近更新 更多