bind method

void bind(
  1. Stream<T> externalStream
)
inherited

Binds an external stream to this reactive variable.

Implementation

void bind(Stream<T> externalStream) {
  if (_binding?.boundStream != null &&
      _binding?.boundStream == externalStream) {
    return;
  }

  unbind();

  _bindingState.boundStream = externalStream.map((event) {
    // Route stream writes through middleware-aware setter.
    _setValueInternal(event);
    return event;
  }).transform(
    StreamTransformer<T, T>.fromHandlers(
      handleError: (error, st, sink) {
        _controller?.addError(error, st);
        sink.addError(error, st);
      },
    ),
  ).asBroadcastStream(
    onListen: (sub) {
      _bindingState.externalListeners++;
      _checkActive();
    },
    onCancel: (subscription) {
      if (_binding != null) {
        _binding!.externalListeners--;
      }
      _checkActive();
      subscription.cancel();
    },
  );

  if (hasListener) {
    _bindingState.activeBoundSubscription =
        _binding!.boundStream!.listen((_) {});
  }
}