同一流(QuerySnapshot)可以与不同页面上的多个 StreamBuilder 一起使用吗? - -扑

Posted

技术标签:

【中文标题】同一流(QuerySnapshot)可以与不同页面上的多个 StreamBuilder 一起使用吗? - -扑【英文标题】:Can same stream(QuerySnapshot) be used with multiple StreamBuilder on different pages? ---Flutter 【发布时间】:2020-12-08 21:41:13 【问题描述】:

也许这是一个新手问题,但我想知道是否可以使用相同的流(流)来构建两个页面的 UI。举个例子:如果有两个页面应该显示从 firebase 读取的相同数据列表(比如用户名和地址)。这可以通过从 firestore 读取数据一次并在每个页面上使用与 streambuilder 相同的 stream 来完成吗?

我能够在第一页上显示列表(使用 streambuilder 和 Listview.builder),但是当我导航到第二页并使用相同的流时(不再从 firebase 读取它,而是使用第一次读取的相同流页)它不起作用。我试过 StreamController.broadcast();也是,但没有运气。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

这是因为流已经有了监听器(第一个StreamBuilder)。相反,您可以使用某种状态管理(它会因应用程序的复杂性而异)并提供流。

假设您正在收听Stream<List<int>>(举个简单的例子)。如果您使用 flutter_bloc 包,您可以拥有一个带有 StreamSubscription 的 BLoC,这将是该 Stream 的唯一侦听器,然后您可以在您的应用程序周围使用来自 BLoC 的数据。 如果你对响应式编程和 Dart Streams 知之甚少,这可能会有点令人困惑(我必须承认,我已经浪费了很多时间来试图理解它——但它比接缝更简单!),但是 fluter_bloc 包有一个很棒的文档。您可以在其中找到 an example,它将 StreamSubscription 与 Firestore 一起使用!

如果您对包或任何示例有任何疑问,请随时在 GitHub 存储库中发布问题!

【讨论】:

以上是关于同一流(QuerySnapshot)可以与不同页面上的多个 StreamBuilder 一起使用吗? - -扑的主要内容,如果未能解决你的问题,请参考以下文章

FLINK基础(92): DS算子与窗口单流算子KeyBy

使用 hotwire 广播到多个 turbo 流

Stream<QuerySnapshot> 返回空文档

达到 limit() 后 QuerySnapshot 删除数据

使用 Firebase 收听 Stream 的结果与 StreamBuilder 不同

如何将asyncData外包给Vuex Store?