executeRequest<T> method

Future<T?> executeRequest<T>(
  1. Future<T> requestFn(), {
  2. String? cacheKey,
  3. NetworkStrategy? strategy,
  4. Duration? cacheTtl,
})

Execute a request through NetworkManager and emit state transitions.

Emits: LoadingSuccess<T> or Error/Offline.

Implementation

Future<T?> executeRequest<T>(
  Future<T> Function() requestFn, {
  String? cacheKey,
  NetworkStrategy? strategy,
  Duration? cacheTtl,
}) async {
  emit(const Loading());

  try {
    final data = await _manager.request<T>(
      requestFn,
      cacheKey: cacheKey,
      strategy: strategy,
      cacheTtl: cacheTtl,
    );
    emit(Success<T>(data));
    return data;
  } catch (e) {
    if (!_manager.isOnline) {
      emit(Offline(queuedRequests: _manager.queue.length));
    } else {
      emit(Error(e.toString(), exception: e));
    }
    return null;
  }
}