build method
Describes the part of the UI represented by this widget.
Implementation
@override
Widget build(BuildContext context) {
final theme = ThemeScope.of(context);
final resolvedKeyStyle = (keyStyle ?? theme.labelLarge).copy();
final resolvedDescriptionStyle =
(descriptionStyle ?? theme.bodySmall).copy();
return LayoutBuilder(
builder: (context, constraints) {
final maxWidth = constraints.maxWidth.isFinite
? constraints.maxWidth.toInt()
: (MediaQuery.maybeOf(context)?.size.width.toInt() ?? 80);
if (showAll) {
final groups = keyMap.fullHelp().map(_visibleBindings).where((group) {
return group.isNotEmpty;
}).toList();
if (groups.isEmpty) return SizedBox.shrink();
final stackGroups = _shouldStackGroups(groups, maxWidth, columnGap);
if (stackGroups) {
return Column(
gap: math.max(1, rowGap),
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
for (final group in groups)
Column(
gap: rowGap,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: _buildResponsiveColumn(
group,
resolvedKeyStyle,
resolvedDescriptionStyle,
maxWidth,
),
),
],
);
}
return Row(
gap: columnGap,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
for (final group in groups)
Column(
gap: rowGap,
crossAxisAlignment: CrossAxisAlignment.start,
children: _buildColumn(
group,
resolvedKeyStyle,
resolvedDescriptionStyle,
),
),
],
);
}
final bindings = _visibleBindings(keyMap.shortHelp());
if (bindings.isEmpty) return SizedBox.shrink();
if (_shouldStackBindings(bindings, maxWidth)) {
return Column(
gap: math.max(1, runSpacing),
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
for (final binding in bindings)
_buildResponsiveBinding(
binding,
resolvedKeyStyle,
resolvedDescriptionStyle,
),
],
);
}
return Wrap(
spacing: itemSpacing,
runSpacing: runSpacing,
children: [
for (final binding in bindings)
_buildInlineBinding(
binding,
resolvedKeyStyle,
resolvedDescriptionStyle,
),
],
);
},
);
}