StreamBuilder 和 AsyncSnapshot + rxdart flutter 问题
StreamBuilder and AsyncSnapshot + rxdart flutter question
我的 bloc 组件中有 final _fetcher = PublishSubject<MyModel>() ;
。这是 MyModel
的结构:
MyModel { List<MyObjects> _objects = [];
List<MyObjects> get allObjects => _objects; }
还有
Observable<MyModel> get myObjects => _fetcher.stream;
集团内。
我有两个页面,第一个显示 Listview.builder
内的 MyObjects
列表,第二个显示选定的 MyObject
数据。
我正在尝试使用 StreamBuilder
.
从 myObjects
获取数据
在第一页中,所有对象都完美显示。但是当我打开一个包含选定对象的页面时,我的 AsyncSnapshot
在 StreamBuilder
中总是有 connections.state
等待,尽管我有流中的数据。
我做错了什么?
拥有数据并不意味着您始终可以访问它。
默认情况下,流(和主题)不存储它们之前收到的数据。因此,如果您迟到了,那么很抱歉,但没有数据。
为了解决这个问题rxdart引入了ReplaySubject和BehaviorSubject。两者都被使用,以便迟到的听众仍然可以抓住最后几个事件。 ReplaySubject 将跟踪最新的 N 个,而 BehaviorSubject 将只保留最后一个。
使用 BehaviorSubject 而不是 PublishSubject 应该可以解决问题
我的 bloc 组件中有 final _fetcher = PublishSubject<MyModel>() ;
。这是 MyModel
的结构:
MyModel { List<MyObjects> _objects = [];
List<MyObjects> get allObjects => _objects; }
还有
Observable<MyModel> get myObjects => _fetcher.stream;
集团内。
我有两个页面,第一个显示 Listview.builder
内的 MyObjects
列表,第二个显示选定的 MyObject
数据。
我正在尝试使用 StreamBuilder
.
从 myObjects
获取数据
在第一页中,所有对象都完美显示。但是当我打开一个包含选定对象的页面时,我的 AsyncSnapshot
在 StreamBuilder
中总是有 connections.state
等待,尽管我有流中的数据。
我做错了什么?
拥有数据并不意味着您始终可以访问它。
默认情况下,流(和主题)不存储它们之前收到的数据。因此,如果您迟到了,那么很抱歉,但没有数据。
为了解决这个问题rxdart引入了ReplaySubject和BehaviorSubject。两者都被使用,以便迟到的听众仍然可以抓住最后几个事件。 ReplaySubject 将跟踪最新的 N 个,而 BehaviorSubject 将只保留最后一个。
使用 BehaviorSubject 而不是 PublishSubject 应该可以解决问题