getStreamed<T> method

  1. @override
Stream<Result<T>> getStreamed<T>(
  1. String path, {
  2. Map<String, dynamic>? queryParameters,
  3. FutureOr<T> onSuccess(
    1. dynamic data
    )?,
  4. FutureOr<T> onError(
    1. dynamic data
    )?,
  5. RestApiClientRequestOptions? options,
  6. Duration? cacheLifetimeDuration,
})
override

Streams GET results, yielding cached data first (if available), then network data.

This implements the stale-while-revalidate pattern: if cached data exists, it's yielded immediately for fast UI updates, then a network request is made and the fresh data is yielded as a second result.

Useful for displaying cached data immediately while fetching updates in the background.

Example:

await for (final result in client.getStreamed<User>('/users/me')) {
  if (result.hasData) {
    updateUI(result.data!);
  }
}

Implementation

@override
Stream<Result<T>> getStreamed<T>(
  String path, {
  Map<String, dynamic>? queryParameters,
  FutureOr<T> Function(dynamic data)? onSuccess,
  FutureOr<T> Function(dynamic data)? onError,
  RestApiClientRequestOptions? options,
  Duration? cacheLifetimeDuration,
}) async* {
  if (_options.cacheEnabled) {
    final cachedResult = await getCached(
      path,
      queryParameters: queryParameters,
      onSuccess: onSuccess,
    );

    if (cachedResult.hasData) {
      yield cachedResult;
    }
  }

  yield await get(
    path,
    queryParameters: queryParameters,
    onSuccess: onSuccess,
    options: options,
    cacheLifetimeDuration: cacheLifetimeDuration,
  );
}