stream<T> method
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();
}