render method

  1. @override
String render()
override

Renders the component as a string.

Implementation

@override
String render() {
  if (_items.isEmpty) return '';

  final buffer = StringBuffer();

  // Calculate max term width if aligning
  var maxTermLen = 0;
  if (_alignTerms) {
    for (final (term, _) in _items) {
      final len = Style.visibleLength(term);
      if (len > maxTermLen) maxTermLen = len;
    }
  }

  final indentStr = ' ' * _indent;
  final gapStr = ' ' * _gap;

  for (var i = 0; i < _items.length; i++) {
    if (i > 0) buffer.writeln();

    final (term, description) = _items[i];

    // Pad term if aligning
    String paddedTerm;
    if (_alignTerms) {
      final termLen = Style.visibleLength(term);
      final padding = ' ' * (maxTermLen - termLen);
      paddedTerm = '$term$padding';
    } else {
      paddedTerm = term;
    }

    final styledTerm = _applyTermStyle(paddedTerm, description, i);
    final styledSeparator = _applySeparatorStyle(_separator);
    final styledDescription = _applyDescriptionStyle(description, term, i);

    buffer.write(
      '$indentStr$styledTerm$styledSeparator$gapStr$styledDescription',
    );
  }

  return buffer.toString();
}