render method

  1. @override
String render()
override

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