gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:28:11 26 4
gpt4 key购买 nike

随着我的代码和我在 Flutter 中的编码经验的进一步发展。在使用 Firebase API 时,我遇到了不同类型的快照。我说的是 AsyncSnapshots、QuerySnapshots、DocumentSnapshots 和 DataSnapshots。如果有更多请给他们命名。
我想知道这些快照之间的确切区别是什么。
到目前为止,我认为 AsyncSnapshot 可能是异步拍摄的快照,这意味着小部件是在快照数据可用之前构建的,因此使其异步(如果我错了,请纠正我)。这是我的困惑开始的地方,快照到底是什么?他们每个人的“数据”是什么。
例如:为什么同一个函数不能检索所有快照中所需的数据,而只能在特定快照上运行。
为什么需要将数据从 QuerySnapshot 转换为 DocumentSnapshot,以使其可访问(如果我错了,请再次纠正我)?
DocumentSnapshot 和 DataSnapshot 之间的确切区别是什么。当它们都返回 Maps 时,为什么它们的调用方式不同?
先感谢您。

最佳答案

据我所知,您是在 Flutter 的上下文中问这个问题的,所以我将在下面回答这个问题。
Firebase 中有两个数据库:原始的实时数据库和较新的 Cloud Firestore。今天两者都是同样有效的选项,但它们与自己的 API 完全分开。但两者都返回数据的快照,其中快照是应用程序代码中数据库中数据的副本。
在 Flutter 中你有 FutureBuilderStreamBuilder ,它处理异步加载的数据的快照。
让我们看看我是否可以覆盖它们:

  • AsyncSnapshot是 Flutter 对来自异步数据源(例如 Firestore 和实时数据库)的数据的封装。它们涵盖了此类数据可能处于的状态,从初始连接到检索,直到出现错误或拥有数据。
  • DocumentSnapshot s 和 QuerySnapshot s 是 Firestore 的类,用于表示单个文档或从数据库读取时获得的文档列表。所以如果你加载单个文档,你会得到一个 DocumentSnapshot用它的数据。如果你加载一个文档列表,你会得到一个 QuerySnapshot然后循环访问个人 DocumentSnapshot s。
  • DataSnapshot是单个节点的实时数据库类和数据库中的节点列表。

  • 所以在 Flutter 中你会有一个 AsyncSnapshot指的是 Firebase 快照类之一,然后该 Firebase 快照包装实际数据。

    假设您想显示一个包含 Firestore 集合中文档的列表,您将拥有:
  • AsyncSnapshot喂给你的 StreamBuilder ,以便它可以呈现数据加载的正确状态。
  • 一个 QuerySnapshot获取数据库中的文档列表。
  • 该列表中的每一项都是 DocumentSnapshot带有来自单个文档的数据快照。

  • 我实际上发现这在代码中更容易看到,就像来自 FlutterFire documentation 的这个例子一样。 :
    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(),
    );
    },
    );
    }
    }

    关于firebase - Firebase 中现有类型的快照之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65874202/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com