flutter - StreamBuilder 和 AsyncSnapshot + rxdart 颤振问题
问题描述
我有final _fetcher = PublishSubject<MyModel>() ;
我的集团组件。这是结构MyModel
:
MyModel { List<MyObjects> _objects = [];
List<MyObjects> get allObjects => _objects; }
还有
Observable<MyModel> get myObjects => _fetcher.stream;
在集团。
我有两个页面,第一个显示MyObjects
inside列表Listview.builder
,第二个显示选定MyObject
数据。
我正在尝试从myObjects
使用中获取数据StreamBuilder
。
在第一页中,所有对象都完美显示。但是当我打开一个带有选定对象的页面时,我的AsyncSnapshot
内部StreamBuilder
总是在connections.state
等待,尽管我有数据在流中。
我究竟做错了什么?
解决方案
拥有数据并不意味着您始终可以访问它。
默认情况下,流(和主题)不存储他们之前收到的数据。因此,如果您参加聚会迟到了,那么对不起您,但没有数据。
为了解决这个问题,rxdart 引入了 ReplaySubject 和 BehaviorSubject。两者都被使用,以便迟到的听众仍然可以抓住最后几个事件。ReplaySubject 将跟踪 N 个最新的,而 BehaviorSubject 将只保留最后一个。
使用 BehaviorSubject 而不是 PublishSubject 应该可以解决问题
推荐阅读
- firebase - 使用 firebase-admin SDK for go 重试失败的 FCM 消息
- sql-server - 用于 JSON 路径的 SQL Server
- hibernate - JPQL 如何通过 KEY 名称或 VALUE 搜索 JSON Map
- visual-studio-code - 浏览器中的 vscode 复制/粘贴错误:“剪贴板 API 已被阻止,因为已将功能策略应用于当前文档。”
- javascript - 如何为 sessionStorage 重载点和括号 [] 和 setItem() 设置器?
- reactjs - 自定义单选按钮输入无法按预期工作,重新渲染时反应
- c# - C#:如何从 XmlSchema 中获取 XmlSchemaElement
- java - 如何使用查询字符串列表在 Sqlite 中执行 LIKE 查询
- kubernetes - 过滤 nginx-ingress 上的输入路径以保护后端
- reactjs - 覆盖 Material UI 类?