如何使用where子句从Firestore获取列表

时间:2019-01-26 08:24:52

标签: firebase dart flutter google-cloud-firestore

我正在使用dart在Firestore中查询我的收藏集,以获取字符串列表。这是Firestore结构:

FireStore List

这是我的代码:

  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):   尝试致电:长度

任何想法如何遍历配料表?

1 个答案:

答案 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']);
            });
          }));
}