buildBox method

Widget buildBox(
  1. BuildContext context,
  2. NavigationControlData? data
)

Builds a column with the label and children. (Non-sidebar context)

Implementation

Widget buildBox(BuildContext context, NavigationControlData? data) {
  final theme = Theme.of(context);
  final scaling = theme.scaling;
  final densityContentPadding = theme.density.baseContentPadding * scaling;

  final labelWidget = buildLabelChild(context, data);
  final paddedLabel = Container(
    alignment: labelAlignment ?? Alignment.center,
    padding: labelPadding ??
        EdgeInsets.symmetric(horizontal: densityContentPadding * padXs),
    child: labelWidget,
  );
  final gap = theme.density.baseGap * scaling * gapSm;

  final items = children;

  final childControlData = data == null
      ? null
      : NavigationControlData(
          containerType: data.containerType,
          parentLabelType: data.parentLabelType,
          parentLabelPosition: data.parentLabelPosition,
          parentLabelSize: data.parentLabelSize,
          parentPadding: data.parentPadding,
          direction: data.direction,
          selectedKey: data.selectedKey,
          onSelected: data.onSelected,
          expanded: data.expanded,
          childCount: items.length,
          spacing: data.spacing,
          keepCrossAxisSize: data.keepCrossAxisSize,
          keepMainAxisSize: data.keepMainAxisSize,
        );
  final flexChildren = [
    if (labelPosition == NavigationLabelPosition.top ||
        labelPosition == NavigationLabelPosition.start) ...[
      paddedLabel,
      AnimatedValueBuilder<double>(
        value: data?.expanded == true ? gap : 0,
        builder: (_, gap, __) => Gap(gap),
        duration: kDefaultDuration,
        // curve: Curves.easeInOut,
      ),
    ],
    Data.inherit(
      data: childControlData,
      child: Flex(
        direction: data?.direction ?? Axis.vertical,
        mainAxisSize: MainAxisSize.min,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        // "The bug does not exist in reproducible code" weird ah bug
        spacing: items.isEmpty ? 0 : data?.spacing ?? 0,
        children: items,
      ),
    ),
    if (labelPosition == NavigationLabelPosition.bottom ||
        labelPosition == NavigationLabelPosition.end) ...[
      AnimatedValueBuilder<double>(
        value: data?.expanded == true ? gap : 0,
        builder: (_, gap, __) => Gap(gap),
        duration: kDefaultDuration,
        // curve: Curves.easeInOut,
      ),
      paddedLabel,
    ],
  ];

  return Flex(
    direction: data?.direction ?? Axis.vertical,
    mainAxisSize: MainAxisSize.min,
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: flexChildren,
  );
}