如何从集合中的Firestore文档中获取数据并将其存储在列表中

时间:2020-06-05 15:03:32

标签: firebase flutter dart google-cloud-firestore

我有一个文档ID列表,我想从Firestore中获取这些文档的数据,并使用FutureBuilder进行显示。

contestList = [awebnmsdfjkeeer23,324cdas4asdf, 34sdfasgadsg]
Future<void> fetchUsergameData() async {

    contestList.forEach((element) async{ 
        await Firestore.instance.collection('LiveGames').document('$element')
            .get().then((dss) {
                if(dss.exists) {
                    tempgame.add(dss.data["GameData"]);
                    temproom.add(dss.data["Room"]);
                    temptitle.add(dss.data["Title"]);
                    temp = tempgame + temproom + temptitle;
                    joinedContests.add(temp);
                }
            }).then((value) => {});
        });

        print(joinedContests);

    }
}

我已经使用上面的函数来获取数据并尝试将其存储在列表中,就像列表中的一个文档数据一样。但是我正在获取数据的空白列表。如何获取整个文档并在Flutter中使用FutureBuilder显示它

1 个答案:

答案 0 :(得分:0)

您的代码似乎有多个不同的问题:

  • contestList包含无效的关键字。 324cdas4asdf34sdfasgadsg不是有效的变量名称,因为它们都以数字开头,该数字不是有效的变量名称。如果应该使用它们作为您要检索的ID,则必须用"括起来,这将使它们成为字符串。
  • 您正在尝试使用'$element'来访问文档,就好像它是一个bash变量一样,但是那里有两个问题:这样做不是那样,也不需要这样做。 element已将值保存为字符串,因此只需按原样访问即可。
  • 您两次调用方法then,而第二次不执行任何操作。这不应该是一个问题,但是它什么也没做,我可以省略。

在下面,您将看到修改后的所有错误的代码的编辑版本。

contestList = ["awebnmsdfjkeeer23", "324cdas4asdf", "34sdfasgadsg"]
Future<void> fetchUsergameData() async {

    contestList.forEach((element) async{ 
        await Firestore.instance.collection('LiveGames').document(element)
            .get().then((dss) {
                if(dss.exists) {
                    tempgame.add(dss.data["GameData"]);
                    temproom.add(dss.data["Room"]);
                    temptitle.add(dss.data["Title"]);
                    temp = tempgame + temproom + temptitle;
                    joinedContests.add(temp);
                }
            });
        });

        print(joinedContests);

    }
}

另一方面,tempgametemproomtemptitle的类型对我们来说还是未知的,但是从访问方式的角度来看,您可能只想执行以下操作:< / p>

tempgame = dss.data["GameData"];
temproom = dss.data["Room"];
temptitle = dss.data["Title"];
temp = tempgame + temproom + temptitle;
joinedContests.add(temp);