Future localOrBackendOrExternal({ required Future Function(T e) storeLocally, required Future Function() localGet, required Future Function() backendGet, required Future 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; }