customWidget static method

Widget customWidget(
  1. BuildContext context,
  2. M3EMenuWidget item, {
  3. required bool autofocus,
  4. required M3EMenuTheme menuTheme,
  5. required M3EMenuSelectCallback onSelect,
})

customWidget.

Implementation

static Widget customWidget(
  BuildContext context,
  M3EMenuWidget item, {
  required bool autofocus,
  required M3EMenuTheme menuTheme,
  required M3EMenuSelectCallback onSelect,
}) {
  final scheme = M3ETheme.of(context).colorScheme;
  final style = M3EMenuStyleScope.styleOf(context);
  final palette =
      M3EMenuStyleScope.colorsOf(context) ?? menuTheme.colors(scheme, style);
  final radius = menuTheme.itemBorderRadius;
  return M3EMenuKeyRegistration(
    label: item.semanticLabel ?? 'menu item',
    enabled: item.enabled,
    builder: (FocusNode node) {
      return Padding(
        padding: EdgeInsets.symmetric(horizontal: menuTheme.stateLayerInset),
        child: M3ETappable(
          enabled: item.enabled,
          autofocus: autofocus,
          focusNode: node,
          semanticLabel: item.semanticLabel,
          materialInk: true,
          onTap: item.enabled
              ? () {
                  item.onPressed?.call();
                  onSelect(item.value);
                }
              : null,
          builder: (BuildContext context, M3EInteractionState state) {
            return M3EFocusRing(
              focused: state.focused,
              radius: radius,
              width: menuTheme.focusIndicatorWidth,
              gap: menuTheme.focusIndicatorOffset,
              color: menuTheme.focusRingColor(scheme),
              child: M3EStateLayerOverlay(
                state: state,
                color: item.selected
                    ? palette.selectedContent
                    : palette.stateLayer,
                shape: RoundedRectangleBorder(borderRadius: radius),
                child: _customWidgetBody(
                  context,
                  item,
                  menuTheme: menuTheme,
                  scheme: scheme,
                  style: style,
                  palette: palette,
                  radius: radius,
                  state: state,
                ),
              ),
            );
          },
        ),
      );
    },
  );
}