我的代码类似于:
StreamBuilder(
stream: bloc.entities,
...
)
在我的BLoC下方,该主题接受fome filter
事件并将其转换为_entities
。一切正常。
class EntityBloc {
final _filterSubject = BehaviourSubject<FilterEvent>();
Stream<DataSet> _entities;
Stream<DataSet> get entities {
if(_entities == null) {
_entities = _filterSubject.asyncMap(_fetchEntities);
}
return _entities;
}
...
}
现在我需要修改StreamBuilder
的结果流。我希望有一种可能重置(刷新)StreamBuilder
,并将其null
的值DataSet
发送到其流。
class EntityBloc {
final _filterSubject = BehaviourSubject<FilterEvent>();
final _datasetSubject = BehaviourSubject<DataSet>();
final _subjects = <Stream<DataSet>>[];
Stream<DataSet> get entities {
if(_subjects.isEmpty) {
_subjects.add(_subject.asyncMap(_fetchEntities));
_subjects.add(_datasetSubject.stream);
}
return Rx.merge(_subjects);
}
...
}
在我的代码中实施此新的BLoC会导致错误Bad state: Stream has already been listen to.
我做错了什么?对于我来说,我采用了第一个BLoC中使用的相同方法。