sendStreamedRequest method

Future<Stream<Map<String, dynamic>>> sendStreamedRequest({
  1. Client? client,
  2. Encoding? encoding,
})

Sends the request and transforms ByteStream to Map<String, dynamic> for every event.

To connect to a data stream, package use BaseRequest's send(), which returns a StreamedResponse. Instead of waiting for the entire response, you can access streamedResponse.stream to receive data as it arrives. This stream provides raw bytes (ByteData), which should be decoded and parsed into usable events.

Implementation

Future<Stream<Map<String, dynamic>>> sendStreamedRequest({
  Client? client,
  Encoding? encoding,
}) async {
  Encoding getEncoding() {
    if (encoding != null) return encoding;
    if (this case Request request) {
      return request.encoding;
    }
    return utf8;
  }

  try {
    final streamedResponse =
        await (client != null ? client.send(this) : send());

    final transformedResponseStream = streamedResponse.stream
        .transform(getEncoding().decoder)
        .transform(sseStreamSplitter)
        .transform(sseStreamParser);

    return transformedResponseStream;
  } catch (e) {
    rethrow;
  }
}