stream<T> method
Streams the response from path as chunks of data.
lineDecoder: Optional function to decode each chunk.
Implementation
Stream<FlexStreamResponse<T>> stream<T>(
String path, {
Map<String, String>? headers,
T Function(String)? lineDecoder,
}) async* {
final uri = _buildUri(path);
final request = await client.getUrl(uri);
_applyHeaders(request, headers);
final flexRequest = FlexHttpRequest(request);
await _runRequestInterceptors(flexRequest);
if (flexRequest.isCancelled) {
throw FlexHttpException('Stream request cancelled');
}
final response = await request.close().timeout(timeout);
_log('Streaming $path: ${response.statusCode}');
await for (final chunk in response.transform(utf8.decoder)) {
final decoded = lineDecoder != null ? lineDecoder(chunk) : chunk as T;
final streamResponse = FlexStreamResponse<T>(
statusCode: response.statusCode,
data: decoded,
headers: response.headers,
);
await _runStreamInterceptors(streamResponse);
yield streamResponse;
}
}