gpt4 book ai didi

flutter - 如何从 QuerySnapshot 中获取特定文档的 DocumentSnapshot?

转载 作者:IT王子 更新时间:2023-10-29 07:02:12 25 4
gpt4 key购买 nike

为简单起见,假设我有两个屏幕:

  • StoriesListScreen
  • StoryDetailsScreen

填充 StoriesListScreen我使用 Stream 从 Firestore 获取一些数据:

Stream<QuerySnapshot> getFirstTenStories() {
return _firestore.collection('stories').limit(10).snapshots();
}

然后我使用这个 StreamStreamBuilderStoriesListScreen并将它包含的文档映射到一些 Story对象。然后我使用 ListView.builder这创造了一些 StoriesListTile采取 Story 的对象对象作为参数,以便它们可以呈现列表中的每个对象。

所以一切都很好......

但是当用户点击 StoriesListTile , 我想打开 StoryDetailsScreen并显示该特定 Story 的详细信息对象。

Story对象此时存在并且已经在 StoriesListTile 中传递对象,我可以很容易地传入这个 Story反对 StoryDetailsScreen :

 Navigator.of(context).push(MaterialPageRoute(builder: (context) => StoryDetailsScreen(_story));

所以它工作正常,但是......

我希望能够听到用于创建 Story 的数据的任何变化。对象。

目前,如果我在 Firestore 中的数据发生变化,那么我在 StoriesListScreen 中的列表会发生变化将自动更新,因为它使用 Stream<QuerySnapshot> .

我想在 StoryDetailsScreen 中做同样的事情但我传递给 StoryDetailsScreen 的内容屏幕不是 Stream , 它是一个 Story不会更新的对象。

一个解决方案可能是从 Firestore 获取这个故事数据并使用 Stream<DocumentSnapshot>StreamBuilderStoryDetailsScreen ,所以如果数据发生变化,它会自动更新。但这将意味着浪费另一个 Firestore 读取,因为我已经有了这些数据。

那么我怎样才能传入 Stream<DocumentSnapshot>对于我的 StoryDetailsScreen 的特定文档?是否可以从 Stream<QuerySnapshot> 中提取它我已经有了?

最佳答案

我真的很喜欢这个问题,你让我重新考虑我是如何编写我的应用程序的,我现在想知道现在是否还有更好的方法。谢谢!

我认为从根本上说,这个问题是关于将业务逻辑(流中的数据)与 UI(当前加载的页面)分开。

我会考虑使用 Provider并创建一个服务来提供应用程序中的任何小部件都可以访问的流。这样你就有了一个单一的服务来监听变化,更新数据,应用程序中的所有其他东西都在监听那个流。

这就是您要找的吗?

编辑

监听数据库更改的流是否收费?

答案是“视情况而定”这是来自 Cloud Fire-Store Billing documentation .

监听查询结果

Cloud Firestore 允许您监听查询结果并在查询结果发生变化时获得实时更新。

当您收听查询结果时,每次添加或更新结果集中的文档时,您都需要为一次读取付费。由于文档已更改而从结果集中删除文档时,您也需要为阅读付费。 (相比之下,删除文档后,您无需为阅读付费。)

此外,如果监听器断开连接超过 30 分钟(例如,如果用户下线),您将像发出全新查询一样为读取付费。

关于flutter - 如何从 QuerySnapshot 中获取特定文档的 DocumentSnapshot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57345261/

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