stream<T> method

Future<void> stream<T>(
  1. Stream<T> stream, {
  2. String contentType = 'application/octet-stream',
  3. Map<String, String>? headers,
  4. List<int> toBytes(
    1. T data
    )?,
})

Streams data to the client with optional transformation.

Implementation

Future<void> stream<T>(
  Stream<T> stream, {
  String contentType = 'application/octet-stream',
  Map<String, String>? headers,
  List<int> Function(T data)? toBytes,
}) async {
  if (_sent) return;

  // Set content type
  _headers.setContentTypeString(contentType);

  // Set additional headers
  headers?.forEach((key, value) {
    _headers.setHeader(key, value);
  });

  // Use default converter for common types
  final converter = toBytes ??
      (T data) {
        if (data is List<int>) return data;
        if (data is String) return _safeUtf8Encode(data);
        throw ArgumentError(
          'Unsupported type: ${data.runtimeType}. Provide a custom toBytes converter.',
        );
      };

  // Transform and stream the data
  final byteStream = stream.map(converter);
  await _response.addStream(byteStream);
  _closeResponse();
}