bind method

void bind(
  1. Stream<T> externalStream
)

Binds an external stream to this reactive variable.

Implementation

void bind(Stream<T> externalStream) {
  if (_boundStream != null && _boundStream == externalStream) return;

  unbind();

  _boundStream = externalStream.map((event) {
    _value = event;
    _controller?.add(event);
    super.notify();
    return event;
  }).transform(
    StreamTransformer<T, T>.fromHandlers(
      handleError: (error, st, sink) {
        _controller?.addError(error, st);
        sink.addError(error, st);
      },
    ),
  ).asBroadcastStream(
    onListen: (sub) {
      _externalListeners++;
      _checkActive();
    },
    onCancel: (subscription) {
      _externalListeners--;
      _checkActive();
      subscription.cancel();
    },
  );

  if (hasListener) {
    _activeBoundSubscription = _boundStream!.listen((_) {});
  }
}