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

2024-03-11

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

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

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

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

先感谢您。


据我所知,您是在 Flutter 的背景下问这个问题,所以我将在下面回答。

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

在颤振中你有FutureBuilder and StreamBuilder,它处理异步加载的数据快照。

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

  • An 异步快照 https://api.flutter.dev/flutter/widgets/AsyncSnapshot-class.html是 Flutter 对来自异步数据源(例如 Firestore 和实时数据库)的数据的包装器。它们涵盖了此类数据可以处于的状态,从初始连接到检索,直到出现错误或拥有数据。
  • 文档快照 https://pub.dev/documentation/cloud_firestore/latest/cloud_firestore/DocumentSnapshot-class.htmls and 查询快照 https://pub.dev/documentation/cloud_firestore/latest/cloud_firestore/QuerySnapshot-class.htmls 是 Firestore 的类,可以表示单个文档,也可以表示从数据库读取时获取的文档列表。因此,如果您加载单个文档,您会得到一个DocumentSnapshot及其数据。如果您加载文档列表,您会得到一个QuerySnapshot然后您循环访问该个人DocumentSnapshots.
  • A 数据快照 https://pub.dev/documentation/firebase_database/latest/firebase_database/DataSnapshot-class.html是单个节点和数据库中节点列表的实时数据库类。

所以在 Flutter 中你将会有一个AsyncSnapshot引用 Firebase 快照类之一,然后该 Firebase 快照会包装实际数据。


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

  1. An AsyncSnapshot喂养你的StreamBuilder,这样就可以渲染出正确的数据加载状态。
  2. A QuerySnapshot获取数据库中的文档列表。
  3. 该列表中的每个项目都是DocumentSnapshot包含单个文档中的数据快照。

事实上,我发现在代码中更容易看到这一点,就像在这个例子中一样FlutterFire 文档 https://firebase.flutter.dev/docs/firestore/usage#realtime-changes:

class UserInformation extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    CollectionReference users = FirebaseFirestore.instance.collection('users');

    return StreamBuilder<QuerySnapshot>(
      stream: users.snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> 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(),
        );
      },
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 中现有的快照类型有什么区别? 的相关文章

  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • Internet Explorer 9 是否会因数组和对象文字末尾的额外逗号而卡住?

    现代浏览器和 Node js 等环境允许您说 a 1 b 2 或 1 2 3 这在历史上一直是 Internet Explorer 的问题 Internet Explorer 9 中修复了此问题吗 对此有两种不同的答案 一种是对象初始值设定
  • 使用Multiprocessing和Pool时如何访问全局变量?

    我试图避免将变量冗余地传递到dataList e g 1 globalDict 2 globalDict 3 globalDict 并在全球范围内使用它们 global globalDict然而 在下面的代码中并不是这样做的解决方案 是否有
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定
  • 如何从 bootstrap-markdown.js 调用 .getContent 和 .parseContent

    我是使用 Bootstrap 插件的新手 刚刚通过代码学院 http www codecademy com en skills make an interactive website 我真的很想用这个很棒的引导 Markdown 插件 ht
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c
  • 如何在 Erlang 中将数字转换为单词?

    我发现了一个关于将数字转换为 单词 的有趣问题 代码高尔夫 数字到单词 https stackoverflow com questions 309884 code golf number to words 我真的很想看看你如何在 Erlan
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO
  • 通过使用 navbarPanel() 并隐藏导航栏构建多页闪亮应用程序用户端(在 ui.R 中)?

    我想构建一个多页闪亮应用程序 我可以在其中控制用户可以看到哪个页面 迪安 阿塔利确实这个演示应用程序中有类似的东西 https github com daattali advanced shiny tree master multiple
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将

随机推荐

  • 使用Java DSL的Camel CXF POJO模式

    我有一个预先存在的 Web 服务 连接 SOAP 如果可能的话 我想在不使用 Swing 框架的情况下进行调用 我遵循接触优先开发 使用 cxf wsdl2java 工具生成我的 java 文件 我希望从 java 对象中提取用户名和密码并
  • 从 C# 创建 COM 索引属性?

    我正在尝试用新的 net dll 来模仿旧的 vb6 dll 模仿必须是完美的 以便调用者不知道他们正在使用新的 dll 不过我有一个好奇心 在 VB6 中 对象库中有以下内容 Property BankList Index As Long
  • std::bad_Optional_access 是针对异常的小犯罪吗?

    If std optional s value 成员函数被调用时optional没有初始化实际值 astd bad optional access被抛出 因为它直接源自std exception 你需要catch std bad optio
  • Java 泛型和接口

    有这样的设计 interface Foo
  • 如何向 iPhone 应用程序添加注销功能?

    我有一个具有以下布局的应用程序 当您打开应用程序时 您会看到登录屏幕 您登录后会看到一个包含 3 个选项卡的选项卡栏 登录视图在选项卡栏的appdelegate中显示为presentModalView 在第三个选项卡中有一个注销按钮 我希望
  • Python ctypes:复制结构的内容

    我想用 ctypes 在 Python 中模仿一段 C 代码 代码如下 typedef struct int x int y point void copy point point a point b a b 在 ctypes 中不可能执行
  • __init__() 缺少 1 个必需的位置参数

    我正在努力学习Python 这是一个非常简单的代码 我在这里想做的就是调用类的构造函数 初始化一些变量并打印该变量 但它给了我一个错误 missing 1 required positional argument class DHT def
  • 在 Mac OS 中使用 JAVA 注册表

    我写了一个Java桌面应用程序在Windows正在使用的平台Windows注册表保存应用程序信息 例如应用程序位置 时间段 例如最多 30 天的免费试用 等 现在 我想创建相同的java应用程序来运行Mac OS 虽然大多数java代码是相
  • 为什么一个文件对象刷新,而另一个文件对象不刷新?

    我想要一个在写入数据时直接刷新到文件的文件对象 并写道 class FlushingFileObject file def write self args kwargs return val file write self args kwa
  • 通过点击铅笔调用监听器(primefaces 2.2.1 rowEditor)

    在 rowEditor 上单击铅笔后如何调用侦听器 我想从 dataTable 中准备文本进行编辑 清除制表符和回车符的 html 标签 你有什么想法 谢谢 实际上 数据表中没有铅笔事件 如果你想在铅笔点击后调用监听器 你可以这样做 将 r
  • JPA (Hibernate) + Spring:处理唯一约束违规

    我有一个具有唯一字段的实体 A 该字段基本上定义了该实体 这意味着它是相等的 那么实体也完全相同 第二点是 如果违反该约束 那么绝不是例外 这意味着完全可以预期用户会尝试输入重复项 如果出现重复 应用程序应该默默地选择已经存在的实体 我现在
  • 通过名称或索引引用列的函数

    我希望能够在一个向量中按名称和索引引用列 作为示例 我仅指定 编辑 我更改了原始向量的顺序 因为我希望顺序无关紧要 columns lt c 1 7 j 8 i 然后我想检索索引 1 到 9 的名称并将它们添加到向量中 在正确的位置 我有一
  • Eclipse 写入控制台

    在 Eclipse 中 如何将调试语句写入控制台窗口 我试过 System out print urls System out println urls Log d tag urls 但我没有看到任何地方显示的值 Thanks 创建一个控制
  • 如何从命令行覆盖 protractor.conf.js 值?

    我目前有量角器设置可以在我们的集成服务器上运行 在 protractor conf js 文件中我有以下内容 multiCapabilities browserName firefox platform MAC browserName ch
  • 检查函数是否返回 true 以执行另一个函数

    我用 JS 编写了一个表单验证 以 return true 结尾 function check validation code return true 我想要的是 需要检查 check 函数是否返回 true 我想执行另一个函数 我尝试过的
  • 如何在 Jinja2 上解压多个变量

    我正在尝试在 jinja 模板引擎上解压多个变量 我怎样才能实现这个目标 我正在努力实现这样的目标 for item1 item2 item3 in items div class row div class four columns im
  • 如何检测文本区域的任何更改?

    我目前已将我的文本区域绑定到几个似乎有效的事件 然而 问题是事件重叠并触发多次 这反过来又使性能降低了太多 我想要做的几乎是捕获文本区域的任何更改 单击 粘贴 keyup keydown 右键单击上下文菜单编辑 右键单击 剪切 删除 粘贴
  • Telegram bot API:我可以混合使用自定义键盘和force_reply吗?

    我有一个自定义键盘 但要处理答案 我需要强制回复 以便我在下一条消息中收到问题 我已经这样做了 var opts reply markup JSON stringify keyboard OK Cancel one time keyboar
  • 导入错误:没有名为 pynotify 的模块。安装模块时

    所以这个错误不断出现 每次我尝试运行该脚本时 它都会返回 Traceback most recent call last File cli py line 11 in
  • Firebase 中现有的快照类型有什么区别?

    随着我在 Flutter 中的代码和编码经验的进一步发展 我在使用 Firebase API 时遇到过不同类型的快照 我说的是 AsyncSnapshots QuerySnapshots DocumentSnapshots 和 DataSn