繁体   English   中英

Firestore 查询正在返回数据,但 Futurebuilder 说它不能是 null

[英]Firestore query is returning data but Futurebuilder saying it cannot be null

我正在尝试根据我在 Firestore 中的文档构建一个列表。 下面是我的未来 function:

Future getBuyerList() async {

await Firestore.instance.collection('Deals').where('buyer_id',isEqualTo: uid_global).snapshots().listen((data) {
  data.documents.forEach((doc) {

    print('in function -  ${doc["car"]}');


    print(doc.data);


  });
});


}

以上在调试器中运行良好。 它显示了我希望放入列表中的项目的完整列表。

我的小部件树中的 Future Builder 如下:

FutureBuilder(

                future: getBuyerList(),

                builder: (BuildContext context, snapshot) {


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

                    return Center(

                      child: CircularProgressIndicator(),

                    );


                  }else{

                    Center(

                      child: Text('data loaded')

                    );

                  }

                }else if (snapshot.hasError){

                  Text('no data');

                }

                },
              ),

我还没有将快照加载到 Listview 中,因为我正试图让 FutureBuilder 至少成功运行。 但我不断收到 FutureBuilder null 错误。

Future Builder 上的空错误。

我尝试通过返回一个列表将 function 作为非 void function 运行,但随后我在编译时遇到错误,说我无法将 Map 分配给 Future>。

请帮忙。

@Peter Haddad 的回答是正确的,但我还需要通过添加AsyncSnapshot<QuerySnapshot>来更改构建器:

builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot)

使用FutureBuilder时需要添加 return :

           FutureBuilder(
                future: getBuyerList(),
                builder: (BuildContext context, snapshot) {
                if(snapshot.hasData){
                  if(snapshot.connectionState == ConnectionState.waiting){
                    return Center(
                      child: CircularProgressIndicator(),
                    );
                  }else{
                   Center(
                      child: Text('data loaded')
                    );
                  }
                }else if (snapshot.hasError){
                  Text('no data');
                }
                  return CircularProgressIndicator();
                },
              ),

return CircularProgressIndicator(); 因为AsyncWidgetBuilder返回一个Widget 此外,如果FutureBuilderbuild function 中的顶部小部件,那么您需要返回它:

return FutureBuilder( /*...*/)

关于 function getBuyerList()执行以下操作:

  Future<QuerySnapshot> getBuyerList() async {
    return await Firestore.instance
        .collection('Deals')
        .where('buyer_id', isEqualTo: uid_global)
        .getDocuments();
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM