request<T> method

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

Execute a request and automatically notify listeners as state changes.

final user = await notifier.request(
  () => api.getUser(),
  cacheKey: 'user',
  strategy: CacheFirst(),
);

Implementation

Future<T?> request<T>(
  Future<T> Function() requestFn, {
  String? cacheKey,
  NetworkStrategy? strategy,
  Duration? cacheTtl,
}) async {
  _state = const Loading();
  notifyListeners();

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