Buffers the output of 'print' function.

Usage

Simple buffering of print

print('Start buffering');

final buffer = PrintBuffer();
await buffer.overridePrint(() {
  print('Buffered');
});

print('End buffering');
stdout.write(buffer.buffer);

Output:

Start buffering
End buffering
Buffered

Simple buffering of stdout

stdout.writeln('Start buffering');

final buffer = PrintBuffer();
await buffer.overrideStdout(() {
  stdout.writeln('Buffered');
});

stdout.writeln('End buffering');
stdout.write(buffer.buffer);

Output:

Start buffering
End buffering
Buffered

Pausing

print('Start buffering');

final buffer = PrintBuffer();
await buffer.overridePrint(() {
  print('Buffered 1');
  buffer.isBuffering = false;
  print('Buffering paused');
  buffer.isBuffering = true;
  print('Buffered 2');
});

print('End buffering');
stdout.write(buffer.buffer);

Output:

Start buffering
Buffering paused
End buffering
Buffered 1
Buffered 2

Adding Timestamp

Use transformer functions. Each one takes a string and returns a string:

print('Start buffering');

final buffer = PrintBuffer(
  transformers: [utcDate, utcTimeSeconds],
);

await buffer.overridePrint(() {
  print('Buffered with timestamp');
  buffer.isBuffering = false;
  print('Buffering paused');
  buffer.isTransforming = false;
  print('Buffering and transforming paused');
  buffer.isBuffering = true;
  print('Buffered without timestamp');
});

print('End buffering');
stdout.write(buffer.buffer);  

Output:

Start buffering
2024-06-03 05:04:02Z Buffering paused
Buffering and transforming paused
End buffering
2024-06-03 05:04:02Z Buffered with timestamp
Buffered without timestamp

Libraries