map<E> method

E map<E>({
  1. required AsyncDataBuilder<E, T> data,
  2. required AsyncErrorBuilder<E> error,
  3. required AsyncStateBuilder<E> loading,
  4. AsyncStateBuilder<E>? reloading,
  5. AsyncStateBuilder<E>? refreshing,
})

Map the state to a value.

final signal = StreamSignal<int>();
signal.value.map(
 data: (value) => 'Value: $value',
 error: (error, stackTrace) => 'Error: $error',
 loading: () => 'Loading...',
);

The error Function below can be one of two types:

  • (dynamic) -> FutureOr
  • (dynamic, StackTrace) -> FutureOr

Implementation

E map<E>({
  required AsyncDataBuilder<E, T> data,
  required AsyncErrorBuilder<E> error,
  required AsyncStateBuilder<E> loading,
  AsyncStateBuilder<E>? reloading,
  AsyncStateBuilder<E>? refreshing,
}) {
  if (isRefreshing) if (refreshing != null) return refreshing();
  if (isReloading) if (reloading != null) return reloading();
  if (hasValue) return data(value as T);
  if (hasError) {
    if (error is Function(dynamic, dynamic)) {
      return error(this.error, stackTrace);
    } else if (error is Function(dynamic)) {
      return error(this.error);
    } else {
      return error();
    }
  }
  return loading();
}