Firebase 从Flatter的Firestore系列中获取所有信息
我在我的项目中建立了Firestore。我创建了一个名为Firebase 从Flatter的Firestore系列中获取所有信息,firebase,dart,flutter,google-cloud-firestore,Firebase,Dart,Flutter,Google Cloud Firestore,我在我的项目中建立了Firestore。我创建了一个名为categories的新集合。在这个集合中,我创建了三个uniq id的文档。现在我想在我的颤振应用程序中获取这个集合,所以我创建了CollectionReference: Firestore.instance.collection('categories') 但我不知道接下来会发生什么 我正在使用这个插件firebase\u firestore:0.0.1+1使用StreamBuilder import 'package:flutter
categories
的新集合。在这个集合中,我创建了三个uniq id的文档。现在我想在我的颤振应用程序中获取这个集合,所以我创建了CollectionReference
:
Firestore.instance.collection('categories')
但我不知道接下来会发生什么
我正在使用这个插件
firebase\u firestore:0.0.1+1
使用StreamBuilder
import 'package:flutter/material.dart';
import 'package:firebase_firestore/firebase_firestore.dart';
class ExpenseList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection("expenses").snapshots,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return new Text("There is no expense");
return new ListView(children: getExpenseItems(snapshot));
});
}
getExpenseItems(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.documents
.map((doc) => new ListTile(title: new Text(doc["name"]), subtitle: new Text(doc["amount"].toString())))
.toList();
}
}
导入“包装:颤振/材料.省道”;
导入“包:firebase_firestore/firebase_firestore.dart”;
类ExpensList扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新的StreamBuilder(
流:Firestore.instance.collection(“费用”).Snapshot,
生成器:(BuildContext上下文,异步快照){
如果(!snapshot.hasData)返回新文本(“没有费用”);
返回新的ListView(子项:getExpenseItems(快照));
});
}
getExpenseItems(异步快照快照){
返回snapshot.data.documents
.map((doc)=>newlistile(标题:新文本(doc[“name”]),副标题:新文本(doc[“amount”].toString()))
.toList();
}
}
如果您只想读一次,请看下面的代码
QuerySnapshot querySnapshot = await Firestore.instance.collection("collection").getDocuments();
var list = querySnapshot.documents;
我找到了一个解决方案:
Future getDocs() async {
QuerySnapshot querySnapshot = await Firestore.instance.collection("collection").getDocuments();
for (int i = 0; i < querySnapshot.documents.length; i++) {
var a = querySnapshot.documents[i];
print(a.documentID);
}
}
Future getDocs()异步{
QuerySnapshot QuerySnapshot=await Firestore.instance.collection(“collection”).getDocuments();
for(int i=0;i
调用
getDocs()
函数,我使用了build函数,它在控制台中打印了所有文档ID。这是从我发现有效的集合中获取所有数据的最简单方法,而不使用不推荐的方法
QuerySnapshot snap = await
Firestore.instance.collection('collection').getDocuments();
snap.documents.forEach((document) {
print(document.documentID);
});
CollectionReference _collectionRef =
FirebaseFirestore.instance.collection('collection');
Future<void> getData() async {
// Get docs from collection reference
QuerySnapshot querySnapshot = await _collectionRef.get();
// Get data from docs and convert map to List
final allData = querySnapshot.docs.map((doc) => doc.data()).toList();
print(allData);
}
CollectionReference\u collectionRef=
FirebaseFirestore.instance.collection('collection');
Future getData()异步{
//从集合引用获取文档
QuerySnapshot QuerySnapshot=wait _collectionRef.get();
//从文档中获取数据并将地图转换为列表
final allData=querySnapshot.docs.map((doc)=>doc.data()).toList();
打印(所有数据);
}
对我来说,它在cloud\u firestore版本^2.1.0上工作
下面是以JSON形式显示每个collection的简单代码。我希望这能帮助别人
FirebaseFirestore.instance.collection("categories").get().then(
(value) {
value.docs.forEach(
(element) {
print(element.data());
},
);
},
);
更新:
- 一次性读取所有数据:
var collection=FirebaseFirestore.instance.collection('users'); var querySnapshot=await collection.get(); for(querySnapshot.docs中的var doc){ 地图数据=doc.data();
var fooValue=data['foo'];//你想做什么?阅读集合?添加新文档?我想阅读集合。你可以使用StreamBuilder,你能告诉我怎么做吗?代码示例会很有用。是的。我在plugin doc中看到了这个示例。在我的例子中,我想将整个集合加载到Dart数组,而不创建小部件。有可能吗?我已经尝试过这个,请听value
它是如何工作的。块中的代码将指示每次集合更改?我是否应该停止侦听?是否可以读取此日期一次?是的。似乎侦听器在没有订户时将自动删除。不幸的是,在其本机api插件上没有Firestore.instance.collection(“expenses”).snapshots.listen((snapshot){snapshot.documents.forEach((doc)=>debugPrint(doc.data.toString());})
。您应该能够单值侦听器
>在等待
获取一个快照上。首先
。如果要在文档下加载列表,该怎么办?getDocuments()现在已被弃用。欢迎使用。请不要发布“仅代码”答案。添加一些解释,说明这是如何解决问题的。getDocuments()在2021年不再可用,这是有效的解决方案。最后!每个答案都有不推荐的方法,但这非常有效,谢谢。我认为这里的问题是我们在思考,而不是在这里声明。当任何一端发生变化时,我们希望反映出来,对吗?这就是“实时数据库”的组成部分e、 “使用此实现,我们有效地减少了来回传输更改的能力。这不再是声明性的!我同意你的看法。有一些解决方案,如streambuilders、mobx或其他反应性库,可以保持数据库的实时性。但是,对于不需要实时更新功能的人来说,这是非常重要的。”lution工作正常。如何将firestore数据转换为自定义模型类数据?例如,如果集合QuerySnapshot
用户
具有
3个字段
名称
作为
字符串
,
年龄
作为
和int
颜色
作为
字符串
?