render method

  1. @override
String render()
override

Renders the component as a string.

Implementation

@override
String render() {
  final buffer = StringBuffer();
  final prefix = ' ' * indent;
  final enumFn = enumerator ?? ListEnumerator.arabic;

  // Pre-calculate symbols to align widths
  final symbols = <String>[];
  var maxSymbolWidth = 0;

  for (var i = 0; i < items.length; i++) {
    // Offset index by startAt for generation
    // If we use default arabic generator, it expects 0-based index and adds 1.
    // But if startAt is 5, we want pass 4 (so it produces 5.)?
    // Or we just rely on `enumerator` taking raw index and we trust user used correct one?
    // For default arabic, we need to shift.
    // But if user provides custom enumerator, shifting might be wrong.
    // Let's assume enumerator receives logical index (0-based iteration index + startAt - 1).
    // If startAt is 1, we pass 0, 1, 2...
    // If startAt is 5, we pass 4, 5, 6...
    final logicalIndex = (startAt - 1) + i;
    final s = enumFn(logicalIndex);
    symbols.add(s);
    if (s.length > maxSymbolWidth) maxSymbolWidth = s.length;
  }

  for (var i = 0; i < items.length; i++) {
    final symbol = symbols[i].padLeft(maxSymbolWidth);
    var text = items[i];

    if (itemStyleFunc != null) {
      final style = itemStyleFunc!(i, text);
      if (style != null) {
        renderConfig.configureStyle(style);
        text = style.render(text);
      }
    }

    buffer.write('$prefix$symbol $text');
    if (i < items.length - 1) buffer.writeln();
  }

  return buffer.toString();
}