join<R> method
Joins four AsyncValue into one.
The resulting AsyncValue will be:
- AsyncValue.data if all are AsyncValue.data.
- AsyncValue.error if one of them is AsyncValue.error.
- AsyncValue.loading if one of them is AsyncValue.loading.
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);
}