BehaviorSubject StreamTransformer

时间:2018-11-18 13:25:20

标签: dart flutter rxdart

我正在寻找一种将普通Stream转换为BehaviorSubject的方法。

这是我执行的代码,但是我不知道如何指定我的类返回BehaviorSubject。而且我的转换器抛出了运行时错误(监听调用为null)。

import 'dart:async';

import 'package:rxdart/subjects.dart';

class BehaviorSubjectTransformer<S, T> extends StreamTransformerBase<S, T> {

  StreamController _controller;

  StreamSubscription _subscription;

  bool cancelOnError;

  // Original Stream
  Stream<S> _stream;

  BehaviorSubjectTransformer({bool sync: false, this.cancelOnError}) {
    _controller = new BehaviorSubject(onListen: _onListen, onCancel: _onCancel, sync: sync);
  }

  BehaviorSubjectTransformer.broadcast({bool sync: false, bool this.cancelOnError}) {
    _controller = new BehaviorSubject(onListen: _onListen, onCancel: _onCancel, sync: sync);
  }

  void _onListen() {
    _subscription = _stream.listen(onData,
        onError: _controller.addError,
        onDone: _controller.close,
        cancelOnError: cancelOnError);
  }

  void _onCancel() {
    _subscription.cancel();
    _subscription = null;
  }

  void onData(S data) {
    _controller.add(data);
  }

  Stream<T> bind(Stream<S> stream) {
    this._stream = stream;
    return _controller.stream;
  }

}

0 个答案:

没有答案