performLayout method

  1. @override
Size performLayout(
  1. BoxConstraints constraints
)
override

Hook for subclasses to perform layout within the given constraints.

Implementation

@override
Size performLayout(BoxConstraints constraints) {
  final help = widget as Help;
  final maxWidth = constraints.maxWidth == BoxConstraints.infinity
      ? 999999
      : constraints.maxWidth;

  if (help.bindings.isEmpty || maxWidth <= 0) {
    return constraints.constrain(Size.zero);
  }

  final items = <_HelpItem>[];
  for (final entry in help.bindings.entries) {
    items.add(_HelpItem(entry.key, entry.value));
  }

  var currentLineY = 1;
  var currentLineX = 0;
  final separatorChars = help.separator.characters;

  for (var i = 0; i < items.length; i++) {
    final item = items[i];
    final itemLength =
        item.key.characters.length + 1 + item.desc.characters.length;
    final isLast = i == items.length - 1;

    if (currentLineX + itemLength > maxWidth && currentLineX > 0) {
      currentLineY++;
      currentLineX = 0;
    }

    currentLineX += itemLength;

    if (!isLast) {
      if (currentLineX + separatorChars.length <= maxWidth) {
        currentLineX += separatorChars.length;
      } else {
        currentLineY++;
        currentLineX = 0;
      }
    }
  }

  final resolvedWidth = constraints.maxWidth == BoxConstraints.infinity
      ? currentLineX
      : constraints.maxWidth;
  return constraints.constrain(Size(resolvedWidth, currentLineY));
}