Firebase 从Flatter的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

我在我的项目中建立了Firestore。我创建了一个名为
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
     Firestore.instance.collection(“expenses”).snapshots.listen((snapshot){snapshot.documents.forEach((doc)=>debugPrint(doc.data.toString());})
    它是如何工作的。块中的代码将指示每次集合更改?我是否应该停止侦听?是否可以读取此日期一次?是的。似乎侦听器在没有订户时将自动删除。不幸的是,在其本机api插件上没有
    单值侦听器
    。您应该能够
    等待
    >在
    快照上。首先
    获取一个
    QuerySnapshot
    。如果要在文档下加载列表,该怎么办?getDocuments()现在已被弃用。欢迎使用。请不要发布“仅代码”答案。添加一些解释,说明这是如何解决问题的。getDocuments()在2021年不再可用,这是有效的解决方案。最后!每个答案都有不推荐的方法,但这非常有效,谢谢。我认为这里的问题是我们在思考,而不是在这里声明。当任何一端发生变化时,我们希望反映出来,对吗?这就是“实时数据库”的组成部分e、 “使用此实现,我们有效地减少了来回传输更改的能力。这不再是声明性的!我同意你的看法。有一些解决方案,如streambuilders、mobx或其他反应性库,可以保持数据库的实时性。但是,对于不需要实时更新功能的人来说,这是非常重要的。”lution工作正常。如何将firestore数据转换为自定义模型类数据?例如,如果集合
    用户
    具有
    3个字段
    名称
    作为
    字符串
    年龄
    作为
    int
    颜色
    作为
    字符串