【发布时间】:2019-01-27 06:43:03
【问题描述】:
下面的 getIngredients() 方法从 firestore 返回一个列表。
Future getIngredients() async {
return Firestore.instance
.collection('ingredients')
.where("name", isEqualTo: widget.dish_name.toString().toLowerCase()).getDocuments();
}
现在我想在下面的项目构建器中显示此列表:
new ListView.builder(
itemExtent: 90,
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return SingleIngredient(
ingredient_name: snapshot.data[index].ingredients,
);
});
我收到以下错误消息:
_FutureBuilderState#7cbda):I/flutter (12164):类 'QuerySnapshot' 没有实例 getter 'length'。我/颤振(12164): 接收方:“QuerySnapshot”I/flutter 实例(12164):已尝试 调用:长度
这是我的火库的结构。我正在取配料表:
更新 我已经更新了代码,但我只得到了成分列表中的第一项(即洋葱)。我希望 itembuilder 构建列表中的每个项目,因为我正在尝试显示图像和成分列表。这就是 SingleIngredient 小部件正在做的事情。那么,我怎样才能一个一个地遍历每个列表呢?
Widget build(BuildContext context) {
return Container(
child: FutureBuilder(
future: getIngredients(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot user = snapshot.data.documents[index];
return SingleIngredient(
// Access the fields as defined in FireStore
ingredient_name: user.data['ingredients'][index].toString(),
);
},
);
} else if (snapshot.connectionState == ConnectionState.done &&
!snapshot.hasData) {
// Handle no data
return Center(
child: Text("No users found."),
);
} else {
// Still loading
return CircularProgressIndicator();
}
}),
);
}
}
【问题讨论】:
-
您必须使用
snapshot.data.documents来访问查询的文档,因此要获得长度为snapshot.data.documents.length。
标签: dart flutter google-cloud-firestore