writeStreamingOutput method

Future<void> writeStreamingOutput(
  1. BuildStep buildStep,
  2. AssetId outputId,
  3. Stream<String> contentStream, {
  4. int bufferSize = defaultChunkSize,
})

Generate streaming output for large generated content

Implementation

Future<void> writeStreamingOutput(
  BuildStep buildStep,
  AssetId outputId,
  Stream<String> contentStream, {
  int bufferSize = defaultChunkSize,
}) async {
  final buffer = StringBuffer();
  var bufferLength = 0;

  await for (final chunk in contentStream) {
    buffer.write(chunk);
    bufferLength += chunk.length;

    // Flush buffer when it reaches the buffer size
    if (bufferLength >= bufferSize) {
      await buildStep.writeAsString(outputId, buffer.toString());

      // Update memory tracking before resetting bufferLength
      _updateMemoryUsage(-bufferLength);

      buffer.clear();
      bufferLength = 0;
    }
  }

  // Write remaining content
  if (bufferLength > 0) {
    await buildStep.writeAsString(outputId, buffer.toString());
  }
}