build method

  1. @override
Widget build(
  1. BuildContext context
)
override

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,
            ),
        ],
      );
    },
  );
}