20 lines
586 B
Dart
20 lines
586 B
Dart
Future<T> localOrBackendOrExternal<T>({
|
|
required Future<void> Function(T e) storeLocally,
|
|
required Future<T?> Function() localGet,
|
|
required Future<T> Function() backendGet,
|
|
required Future<T> Function() externalGet,
|
|
}) async {
|
|
final local = await localGet();
|
|
if (local != null) return local;
|
|
try {
|
|
final backend = await backendGet();
|
|
storeLocally(backend);
|
|
return backend;
|
|
} catch (error, stackTrace) {
|
|
Future(() => Error.throwWithStackTrace(error, stackTrace));
|
|
}
|
|
final external = await externalGet();
|
|
storeLocally(external);
|
|
return external;
|
|
}
|