热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Firebase中现有类型的快照之间有什么区别?

随着我的代码和我在Flutter中的编码经验的进一步发展。在使用FirebaseAPI时,我遇到了不同类型的快照。我说的是AsyncSnapshots、QuerySnapsho

随着我的代码和我在 Flutter 中的编码经验的进一步发展。在使用 Firebase API 时,我遇到了不同类型的快照。我说的是 AsyncSnapshots、QuerySnapshots、DocumentSnapshots 和 DataSnapshots。如果有更多请给他们命名。

我想知道这些快照之间的确切区别是什么。

到目前为止,我认为 AsyncSnapshot 可能是异步拍摄的快照,这意味着小部件是在快照数据可用之前构建的,因此使其异步(如果我错了,请纠正我)。这是我的困惑开始的地方,快照到底是什么?他们每个人的“数据”是什么。例如:为什么同一个函数不能检索所有快照中所需的数据,而只能在特定快照上运行。

为什么需要将数据从 QuerySnapshot 转换为 DocumentSnapshot,以使其可访问(如果我错了,请再次纠正我)?DocumentSnapshot 和 DataSnapshot 之间的确切区别是什么。当它们都返回 Maps 时,为什么它们的调用方式不同?

先感谢您。

回答


据我所知,您是在 Flutter 的上下文中提出这个问题的,所以我将在下面回答这个问题。

Firebase 中有两个数据库:原始的实时数据库和较新的 Cloud Firestore。今天两者都是同样有效的选项,但它们与自己的 API 完全分开。但是两者都返回数据的快照,其中快照是应用程序代码中数据库中数据的副本。

在 Flutter 中,您有FutureBuilderStreamBuilder,它们处理异步加载的数据快照。

让我们看看我是否可以覆盖它们:


  • 一个AsyncSnapshot是颤振的周围从异步数据源,如公司的FireStore和实时数据库的数据的封装。它们涵盖了此类数据可能处于的状态,从初始连接到检索,直到出现错误或拥有数据。

  • DocumentSnapshot和QuerySnapshot是 Firestore 的类,用于表示单个文档或从数据库读取时获得的文档列表。因此,如果您加载单个文档,您将获得一个DocumentSnapshot包含其数据的文件。如果你加载一个文档列表,你会得到一个QuerySnapshot,然后循环访问单个DocumentSnapshots。

  • 一个DataSnapshot是实时数据库的两个单个节点,并从数据库节点列表类。

因此,在 Flutter 中,您将拥有一个AsyncSnapshot指向 Firebase 快照类之一的 that,然后该 Firebase 快照包装实际数据。


假设您想显示一个包含 Firestore 集合中文档的列表,您将拥有:


  1. 一个AsyncSnapshot养活你StreamBuilder,这样才可以使数据加载正确的状态。

  2. AQuerySnapshot表示数据库中的文档列表。

  3. 然后,该列表中的每个项目都DocumentSnapshot带有来自单个文档的数据快照。

实际上,我发现在代码中更容易看到这一点,如FlutterFire 文档中的这个示例所示:

class UserInformation extends StatelessWidget {
@override
Widget build(BuildContext context) {
CollectionReference users = FirebaseFirestore.instance.collection('users');
return StreamBuilder(
stream: users.snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError) {
return Text('Something went wrong');
}
if (snapshot.cOnnectionState== ConnectionState.waiting) {
return Text("Loading");
}
return new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document.data()['full_name']),
subtitle: new Text(document.data()['company']),
);
}).toList(),
);
},
);
}
}






推荐阅读
author-avatar
素子花开365
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有