我正在使用dart
在Firestore中查询我的收藏集,以获取字符串列表。这是Firestore结构:
这是我的代码:
Future getIngredients() async {
var firestore = Firestore.instance;
List<String> ingredients = new List<String>();
// this will return exactly one document every time.
CollectionReference col = firestore.collection("ingredients");
Query query = col.where('name', isEqualTo: widget.dish_name.toString().toLowerCase());
// How do I retrieve the ingredient list?
}
有什么想法吗?
更新
这是我点击this链接之后所做的。
Future getIngredients() async {
var list = [];
Firestore.instance
.collection('ingredients')
.where("name", isEqualTo: widget.dish_name.toString().toLowerCase())
.snapshots()
.listen((data) =>
data.documents.forEach((doc) => list.add(doc["ingredients"])));
print("First item is" + list[0]);
return list;
}
但是,该列表似乎为空。但是,当我进行 print(doc [“ ingredients”]] 时,我得到了所有数据。我究竟做错了什么?
第二次更新
所以我设法获取了数据,现在我试图用以下代码显示它:
new ListView.builder(
itemExtent: 90,
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return SingleIngredient(
ingredient_name: snapshot.data[index].data["ingredients"],
);
});
但是我遇到以下错误:
“ QuerySnapshot”类没有实例获取程序“ length”。我/扑 (31722):接收者:“ QuerySnapshot” I / flutter的实例(31722): 尝试致电:长度
任何想法如何遍历配料表?
答案 0 :(得分:0)
您可能在更新类中的 List 后忘记调用 setState
。
Future getIngredients() async {
var list = [];
FirebaseFirestore.instance
.collection('ingredients')
.where("name", isEqualTo: widget.dish_name.toString().toLowerCase())
.get()
.then((data) =>
data.docs.forEach((doc) {
setState(() {
list.add(doc['ingredients']);
});
}));
}