executeAndEmit<T> method
Future<T?>
executeAndEmit<T>(
- Future<
T> requestFn(), { - required void emit(),
- String? cacheKey,
- NetworkStrategy? strategy,
- Duration? cacheTtl,
Execute a request and pipe NetworkState changes into emit.
This is designed to be called from a Bloc event handler or Cubit method:
class UserCubit extends Cubit<NetworkState> {
UserCubit(this._manager) : super(const Idle());
final NetworkManager _manager;
Future<void> loadUser() async {
await _manager.executeAndEmit(
() => api.getUser(),
emit: emit,
cacheKey: 'user',
strategy: CacheFirst(),
);
}
}
Implementation
Future<T?> executeAndEmit<T>(
Future<T> Function() requestFn, {
required void Function(NetworkState) emit,
String? cacheKey,
NetworkStrategy? strategy,
Duration? cacheTtl,
}) async {
emit(const Loading());
try {
final data = await request<T>(
requestFn,
cacheKey: cacheKey,
strategy: strategy,
cacheTtl: cacheTtl,
);
emit(Success<T>(data));
return data;
} catch (e) {
if (!isOnline) {
emit(Offline(queuedRequests: queue.length));
} else {
emit(Error(e.toString(), exception: e));
}
return null;
}
}