我现在使用Firestore在Flutter中制作一个应用程序,我将遍历集合中的所有文档,并且想要获得文档名称(id)和文档字段,并对此进行处理。我已经建立了一个显示数据的列表视图,但是对此我无能为力,例如,将其添加到列表或其他内容。 谢谢
答案 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'];
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 网站上更改集合中的内容来测试流式传输。