render method

  1. @override
String render()
override

Renders the component as a string.

Implementation

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

  final buffer = StringBuffer();

  // Calculate max term width across all groups if needed
  var globalMaxTermLen = 0;
  if (_alignAcrossGroups) {
    for (final (_, items) in _groups) {
      for (final term in items.keys) {
        final len = Style.visibleLength(term);
        if (len > globalMaxTermLen) globalMaxTermLen = len;
      }
    }
  }

  final groupIndentStr = ' ' * _groupIndent;
  final spacingLines = '\n' * _groupSpacing;

  for (var g = 0; g < _groups.length; g++) {
    if (g > 0) buffer.write(spacingLines);

    final (header, items) = _groups[g];

    // Render header
    buffer.writeln('$groupIndentStr${_applyHeaderStyle(header)}');

    // Build definition list for this group
    final list = DefinitionList(renderConfig: _renderConfig)
      ..items(items)
      ..separator(_separator)
      ..indent(_indent)
      ..gap(_gap)
      ..alignTerms(_alignTerms);

    if (_termStyle != null) list.termStyle(_termStyle!);
    if (_descriptionStyle != null) list.descriptionStyle(_descriptionStyle!);
    if (_separatorStyle != null) list.separatorStyle(_separatorStyle!);
    if (_styleFunc != null) list.styleFunc(_styleFunc!);

    buffer.write(list.render());
  }

  return buffer.toString();
}