render method
Renders the component as a string.
Implementation
@override
String render() {
final lines = _normalizeLines(message);
final buffer = StringBuffer();
final blockColor = switch (blockStyle) {
BlockStyleType.info =>
(String s) => renderConfig
.configureStyle(Style().foreground(Colors.info))
.render(s),
BlockStyleType.success =>
(String s) => renderConfig
.configureStyle(Style().foreground(Colors.success))
.render(s),
BlockStyleType.warning =>
(String s) => renderConfig
.configureStyle(Style().foreground(Colors.warning))
.render(s),
BlockStyleType.error =>
(String s) => renderConfig
.configureStyle(Style().foreground(Colors.error))
.render(s),
BlockStyleType.note =>
(String s) => renderConfig.configureStyle(Style().dim()).render(s),
};
final prefixText =
prefix ??
switch (blockStyle) {
BlockStyleType.info => '[INFO]',
BlockStyleType.success => '[OK]',
BlockStyleType.warning => '[WARNING]',
BlockStyleType.error => '[ERROR]',
BlockStyleType.note => '[NOTE]',
};
final pad = ' ' * padding;
if (large) {
final prefixWidth = Style.visibleLength(prefixText);
final maxWidth = lines
.map((l) => Style.visibleLength(l))
.fold<int>(0, (m, v) => v > m ? v : m);
final blockWidth = (maxWidth + padding * 2 + prefixWidth + 2).clamp(
40,
renderConfig.terminalWidth - 4,
);
buffer.writeln();
buffer.writeln(blockColor(' ' * blockWidth));
buffer.writeln(
blockColor(
'$pad$prefixText${' ' * (blockWidth - prefixWidth - padding)}',
),
);
for (final line in lines) {
final fill = blockWidth - Style.visibleLength(line) - padding * 2;
buffer.writeln(
blockColor('$pad$line${' ' * (fill > 0 ? fill : 0)}$pad'),
);
}
buffer.writeln(blockColor(' ' * blockWidth));
buffer.write('');
} else {
buffer.writeln();
for (final line in lines) {
buffer.writeln('${blockColor(prefixText)} $line');
}
}
return buffer.toString();
}