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