getStreamed<T> method
Stream<Result<T> >
getStreamed<T>(
- String path, {
- Map<
String, dynamic> ? queryParameters, - FutureOr<
T> onSuccess(- dynamic data
- FutureOr<
T> onError(- dynamic data
- RestApiClientRequestOptions? options,
- 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,
);
}