Created
January 9, 2021 20:22
-
-
Save stargazing-dino/99435fd26d2c1be447e7946ddab0720b to your computer and use it in GitHub Desktop.
Combines AsyncValues for use with Riverpod
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:hooks_riverpod/all.dart'; | |
import 'package:tuple/tuple.dart'; | |
AsyncValue<Tuple2<T, R>> combineAsync2<T, R>( | |
AsyncValue<T> asyncOne, | |
AsyncValue<R> asyncTwo, | |
) { | |
if (asyncOne is AsyncError) { | |
final error = asyncOne as AsyncError<T>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncTwo is AsyncError) { | |
final error = asyncTwo as AsyncError<R>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncOne is AsyncLoading || asyncTwo is AsyncLoading) { | |
return AsyncLoading(); | |
} else if (asyncOne is AsyncData && asyncTwo is AsyncData) { | |
return AsyncData(Tuple2<T, R>(asyncOne.data.value, asyncTwo.data.value)); | |
} else { | |
throw 'Unsupported case'; | |
} | |
} | |
AsyncValue<Tuple3<T, R, S>> combineAsync3<T, R, S>( | |
AsyncValue<T> asyncOne, | |
AsyncValue<R> asyncTwo, | |
AsyncValue<S> asyncThree, | |
) { | |
if (asyncOne is AsyncError) { | |
final error = asyncOne as AsyncError<T>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncTwo is AsyncError) { | |
final error = asyncTwo as AsyncError<R>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncThree is AsyncError) { | |
final error = asyncThree as AsyncError<S>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncOne is AsyncLoading || | |
asyncTwo is AsyncLoading || | |
asyncThree is AsyncLoading) { | |
return AsyncLoading(); | |
} else if (asyncOne is AsyncData && | |
asyncTwo is AsyncData && | |
asyncThree is AsyncData) { | |
return AsyncData(Tuple3<T, R, S>( | |
asyncOne.data.value, | |
asyncTwo.data.value, | |
asyncThree.data.value, | |
)); | |
} else { | |
throw 'Unsupported case'; | |
} | |
} | |
AsyncValue<Tuple4<T, R, S, Q>> combineAsync4<T, R, S, Q>( | |
AsyncValue<T> asyncOne, | |
AsyncValue<R> asyncTwo, | |
AsyncValue<S> asyncThree, | |
AsyncValue<Q> asyncFour, | |
) { | |
if (asyncOne is AsyncError) { | |
final error = asyncOne as AsyncError<T>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncTwo is AsyncError) { | |
final error = asyncTwo as AsyncError<R>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncThree is AsyncError) { | |
final error = asyncThree as AsyncError<S>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncFour is AsyncError) { | |
final error = asyncFour as AsyncError<Q>; | |
return AsyncError(error.error, error.stackTrace); | |
} else if (asyncOne is AsyncLoading || | |
asyncTwo is AsyncLoading || | |
asyncThree is AsyncLoading || | |
asyncFour is AsyncLoading) { | |
return AsyncLoading(); | |
} else if (asyncOne is AsyncData && | |
asyncTwo is AsyncData && | |
asyncThree is AsyncData && | |
asyncFour is AsyncData) { | |
return AsyncData(Tuple4<T, R, S, Q>( | |
asyncOne.data.value, | |
asyncTwo.data.value, | |
asyncThree.data.value, | |
asyncFour.data.value, | |
)); | |
} else { | |
throw 'Unsupported case'; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment