我正在尝试从我在Firestore中拥有的文档构建列表。以下是我的未来功能:
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);
});
});
}
以上内容在调试器中运行良好。它显示了我希望放入列表中的项目的完整列表。
我的窗口小部件树中的“我的未来构建器”如下:
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空错误。
我还尝试通过返回列表将函数作为非void函数运行,但随后在编译时出现错误,提示我无法将Map分配给Future>。
请帮助。
@Peter Haddad的答案是正确的,但我还需要通过添加AsyncSnapshot<QuerySnapshot>
对构建器进行更改:
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot)
答案 0 :(得分: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();
}