Поведение Subject StreamTransformer

Я ищу способ превратить обычный поток в BehaviorSubject.

Это код, который я сделал, но я не знаю, как указать, что мой класс возвращает BehaviorSubject. И мой преобразователь выдает ошибку времени выполнения (слушание вызвано на ноль).

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 ответов

Другие вопросы по тегам