RxDart流合并导致错误“流已被监听”

时间:2020-06-24 09:49:13

标签: flutter dart stream rxdart

我的代码类似于:

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中使用的相同方法。

0 个答案:

没有答案