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

问题描述 投票:0回答:1

我试图从我在Firestore中的文档中建立一个列表,下面是我的Future函数。

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


  });
});


}

上面的函数在调试器中运行得很好,它显示了我期望放入列表中的全部项目列表。

我的未来生成器在我的widget树中是这样的。

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');

                }

                },
              ),

我还没有把快照加载到列表视图中 因为我想让未来生成器至少成功运行 但我一直得到一个未来生成器为空的错误信息。

Null error on Future Builder.

我试着将函数作为一个非无效函数运行,并返回一个列表,但在编译时我得到一个错误,说我不能给Future> 分配一个地图。

请帮助我。

@Peter Haddad的回答是正确的,但我还需要对构建器进行修改,在其中加入 AsyncSnapshot<QuerySnapshot>:

builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot)
flutter dart future
1个回答
1
投票

你需要在使用 FutureBuilder:

           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. 此外,如果 FutureBuilder 中的顶部小部件。build 函数,那么你需要返回它。

return FutureBuilder( /*...*/)

关于这个函数 getBuyerList() 做到以下几点:

  Future<QuerySnapshot> getBuyerList() async {
    return await Firestore.instance
        .collection('Deals')
        .where('buyer_id', isEqualTo: uid_global)
        .getDocuments();
  }
© www.soinside.com 2019 - 2024. All rights reserved.