stream<T> method

Stream<FlexStreamResponse<T>> stream<T>(
  1. String path, {
  2. Map<String, String>? headers,
  3. T lineDecoder(
    1. String
    )?,
})

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;
  }
}