fetch method

  1. @override
Future<void> fetch(
  1. AsyncSource<T> source
)
override

Replaces the current source and subscribes to source.

Any earlier source is disposed, and late emissions from replaced sources are ignored. This signal keeps its current state until the new source emits a replacement state.

Implementation

@override
Future<void> fetch(AsyncSource<T> source) async {
  if (isDisposed) return;
  final objId = Object();
  _objId = objId;

  _sourceDisposer?.call();
  _sourceDisposer = source.dispose;

  void emit(AsyncState<T> state) {
    if (_objId == objId) {
      value = state;
    }
  }

  try {
    await source.subscribe(emit);
  } finally {
    if (_objId == objId) {
      _objId = null;
      final disposer = _sourceDisposer;
      _sourceDisposer = null;
      disposer?.call();
    }
  }
}