maybeWhen<R> method

R maybeWhen<R>({
  1. R data(
    1. Iterable<T> data, {
    2. bool isLoading,
    })?,
  2. R error(
    1. Object,
    2. StackTrace?
    )?,
  3. R loading()?,
  4. required R orElse(),
})

Implementation

R maybeWhen<R>({
  R Function(Iterable<T> data, {bool isLoading})? data,
  R Function(Object, StackTrace?)? error,
  R Function()? loading,
  required R Function() orElse,
}) {
  final snapshotWithError =
      singleWhereOrNull((snapshot) => snapshot.hasError);
  final hasData = any((snapshot) => snapshot.hasData);

  if (snapshotWithError != null && error != null) {
    return error(snapshotWithError.error!, snapshotWithError.stackTrace);
  }

  if (hasData && data != null) {
    return data(
      map((snapshot) => snapshot.data!).toList(),
      isLoading: any((snapshot) {
        return snapshot.connectionState == ConnectionState.active;
      }),
    );
  }

  if (loading != null) {
    return loading();
  }

  return orElse();
}