【问题标题】:Does Streambuilder fetches all the data from a firestore document or only fields that are needed?Streambuilder 是从 Firestore 文档中获取所有数据还是仅获取需要的字段?
【发布时间】:2021-11-23 03:28:13
【问题描述】:

在我的应用程序中,我使用 Streambuilder 在屏幕上显示存储在 Firestore 中的计划列表(每个计划都有自己的文档):

final CollectionReference planCol = FirebaseFirestore.instance.collection('users').doc(FirebaseAuth.instance.currentUser.uid).collection('plans');

body: StreamBuilder(
            stream: planCol.snapshots(),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                final planDocs = snapshot.data.docs;
                return ListView.builder(
                  itemCount: planDocs.length,
                  itemBuilder: (context, index) => MyListTile(
                      title: Text(planDocs[index]['name']),
                      trailing: IconButton(
                        icon: Icon(Icons.edit),
                        onPressed: () {
                          edit(planDocs[index]);
                        },
                      ),
                      onTap: () {
                        Navigator.push(
                          context,
                          MaterialPageRoute(
                            builder: (context) {
                              return ExerciseTable(
                                plan: UserPlan(
                                  name: planDocs[index]['name'],
                                  exerciseNames: planDocs[index]
                                  ['exerciseNames'],
                                  rows: planDocs[index]['rows'],
                                  planId: planDocs[index].id,
                                ),
                              );
                            },
                          ),
                        );
                      }),
                );
              } else {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
            }));

在这个屏幕上,我只想显示每个文档的名称,而不是存储在文档中的所有其他数据(因为它们非常大)。现在我问自己,当每个文档都很大时,Streambuilder 的工作效率如何。它是加载整个文档还是只加载文档的字段?

【问题讨论】:

    标签: firebase flutter dart google-cloud-platform google-cloud-firestore


    【解决方案1】:

    在这个屏幕上,我只想显示每个文档的名称,而不是存储在文档中的所有其他数据(因为它们非常大)。

    所有 Cloud Firestore 侦听器都会在文档级别触发。因此,您无法仅获取文档中单个字段的值。这就是 Firestore 的工作方式。

    现在我问自己,当每个文档都很大时,Streambuilder 的工作效率如何。

    更多的是下载这些文档所需的时间。

    需要加载整个文档还是只加载文档的字段?

    它加载整个文档。

    如果您只需要一些名称,则应考虑将这些名称存储在单个文档中。在这种情况下,您只能阅读一份文档,并且只需支付一次阅读费用。

    【讨论】:

    • 谢谢!当我将名称存储在一个额外的文档中时,如何在单击一个计划后访问包含所有数据的单个文档?现在,正如您在代码中看到的那样,我通过构造函数将快照中的数据传递给
    • 您应该创建一个指向该文档的引用。像这样rootRef/data/namesDocument。所以基本上你应该这样做。试一试,应该可以的。如果您在实施时遇到困难,请在 StackOverflow 上发布一个新问题,其中包含您使用自己的 MCVE 尝试过的问题,以便我和其他 Firebase 开发人员可以帮助您。
    猜你喜欢
    • 2023-01-01
    • 1970-01-01
    • 2021-02-20
    • 2022-11-30
    • 2021-01-12
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多