同一流(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 一起使用吗? - -扑的主要内容,如果未能解决你的问题,请参考以下文章
达到 limit() 后 QuerySnapshot 删除数据