首页 > 解决方案 > StreamBuilder 和 AsyncSnapshot + rxdart 颤振问题

问题描述

我有final _fetcher = PublishSubject<MyModel>() ;我的集团组件。这是结构MyModel

MyModel { List<MyObjects> _objects = []; 
List<MyObjects> get allObjects => _objects; }

还有

Observable<MyModel> get myObjects => _fetcher.stream;

在集团。

我有两个页面,第一个显示MyObjectsinside列表Listview.builder,第二个显示选定MyObject数据。
我正在尝试从myObjects使用中获取数据StreamBuilder
在第一页中,所有对象都完美显示。但是当我打开一个带有选定对象的页面时,我的AsyncSnapshot内部StreamBuilder总是在connections.state等待,尽管我有数据在流中。
我究竟做错了什么?

标签: flutterrxdart

解决方案


拥有数据并不意味着您始终可以访问它。

默认情况下,流(和主题)不存储他们之前收到的数据。因此,如果您参加聚会迟到了,那么对不起您,但没有数据。

为了解决这个问题,rxdart 引入了 ReplaySubject 和 BehaviorSubject。两者都被使用,以便迟到的听众仍然可以抓住最后几个事件。ReplaySubject 将跟踪 N 个最新的,而 BehaviorSubject 将只保留最后一个。

使用 BehaviorSubject 而不是 PublishSubject 应该可以解决问题


推荐阅读