join<R> method

AsyncValue<R> join<R>(
  1. R mapper(
    1. T1,
    2. T2,
    3. T3,
    4. T4,
    )
)

Joins four AsyncValue into one.

The resulting AsyncValue will be:

Implementation

AsyncValue<R> join<R>(R Function(T1, T2, T3, T4) mapper) {
  if ($1 is AsyncData &&
      $2 is AsyncData &&
      $3 is AsyncData &&
      $4 is AsyncData) {
    return AsyncValue<R>.data(mapper(
      ($1 as AsyncData<T1>).data,
      ($2 as AsyncData<T2>).data,
      ($3 as AsyncData<T3>).data,
      ($4 as AsyncData<T4>).data,
    ));
  }

  final data =
      $1.data != null && $2.data != null && $3.data != null && $4.data != null
          ? mapper($1.data as T1, $2.data as T2, $3.data as T3, $4.data as T4)
          : null;

  if ($1 is AsyncError ||
      $2 is AsyncError ||
      $3 is AsyncError ||
      $4 is AsyncError) {
    final asyncError = $1 is AsyncError
        ? $1 as AsyncError
        : $2 is AsyncError
            ? $2 as AsyncError
            : $3 is AsyncError
                ? $3 as AsyncError
                : $4 as AsyncError;
    final error = asyncError.error;
    final stackTrace = asyncError.stackTrace;

    return AsyncValue<R>.error(
      error,
      stackTrace,
      data,
    );
  }

  return AsyncValue<R>.loading(data);
}