uaestats_fe/lib/domain/use_cases/stat_data/fallback_logic.dart
2024-10-28 16:45:11 +05:30

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;
}