我试图从我在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');
}
},
),
我还没有把快照加载到列表视图中 因为我想让未来生成器至少成功运行 但我一直得到一个未来生成器为空的错误信息。
我试着将函数作为一个非无效函数运行,并返回一个列表,但在编译时我得到一个错误,说我不能给Future> 分配一个地图。
请帮助我。
@Peter Haddad的回答是正确的,但我还需要对构建器进行修改,在其中加入 AsyncSnapshot<QuerySnapshot>
:
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot)
你需要在使用 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();
}