when<R> method

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

Implementation

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

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