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