Flutter:如何在Firestore中获取集合的所有文档名称

时间:2019-03-14 20:40:36

标签: flutter google-cloud-firestore

我现在使用Firestore在Flutter中制作一个应用程序,我将遍历集合中的所有文档,并且想要获得文档名称(id)和文档字段,并对此进行处理。我已经建立了一个显示数据的列表视图,但是对此我无能为力,例如,将其添加到列表或其他内容。 谢谢

6 个答案:

答案 0 :(得分:5)

首先,请参考Firestore

final userRef = Firestore.instance.collection('users');

第二,使迭代器从fireStore中获取所有文档

 userRef.getDocuments().then((snapshot) {
      snapshot.documents.forEach((doc) {
        print(doc.data);
      });
    });
  • 您可以获取诸如电子邮件之类的特定数据作为示例:
print(doc.data['email'];
  • 您可以通过以下方式获取文档ID
print(doc.documentID);
  • 可以通过以下方式检查文档是否存在
print(doc.exists);

答案 1 :(得分:0)

您可以通过获取以下文档列表来实现:

final QuerySnapshot result =
          await Firestore.instance.collection('myCollection').getDocuments();
final List<DocumentSnapshot> documents = result.documents;

然后您可以遍历此列表并获取数据:

documents.forEach((data) => print(data));

答案 2 :(得分:0)

这是更新的答案。 最近getDocuments已被Firebase扑灭。

我们可以使用get来查询集合中的所有文档。

像这样

final QuerySnapshot result =
      await Firestore.instance.collection('myCollection').get();
final List<DocumentSnapshot> documents = result.docs;

并列出所有文档,您只需要像这样循环文档列表

documents.forEach((data) => print(data));

答案 3 :(得分:0)

您还可以通过使用 FutureBuilder 包装小部件来获取文档名称 像这样:

FutureBuilder(
              future: FirebaseFirestore.instance
                  .collection("collection_name")
                  .get(),
              builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
                if (snapshot.hasData) {
                  QuerySnapshot documents = snapshot.data;
                  List<DocumentSnapshot> docs = documents.docs;
                  docs.forEach((data) {
                    print(data.id);
                  });
                } else {
                  print("nodata");
                }
                return Container();
              })

答案 4 :(得分:0)

正如 Shubham 所说的 getDocuments 现在已弃用,所以如果您只想返回文档的名称,您应该这样做:

final db = FirebaseFirestore.instance;
var result=await db.collection('Pets').get();
result.docs.forEach((res) {print(res.id); });

您也可以像这样使用 where 打印特定的:

var result=await db.collection('Pets').where("sex",whereIn:["Male"] ).get();
result.docs.forEach((res) {print(res.id); });

这对我有用,祝你好运。

答案 5 :(得分:0)

您可以通过使用流监听数据来高效地检索数据。

首先获取 Firestore 的参考:

final userRef = Firestore.instance.collection('users');

使用以下功能,您将订阅来自 Firestore 的数据。这意味着每次您的集合中发生修改时,Firestore 都会自动通知您的应用(每次您的应用收到通知时,您监听更改的代码都会重新运行)。

在第一个 for 循环中,您正在侦听集合中的更改,循环浏览快照。第二个 for 循环将遍历 List<QueryDocumentSnapshot>,因此您可以访问每个快照的文档。

void getData() async {
 await for (var snapshot in userRef.snapshots()) {
  for(var document in snapshot.docs()) {
    print(document.data()); //You'll get printed the whole data
    print(document['email']); //You'll get printed the email field.
    print(document.id); //You'll get printed the document ID
  }
 }

提示:您可以通过直接在 Firebase 网站上更改集合中的内容来测试流式传输。

相关问题