customWidget static method
Widget
customWidget(
- BuildContext context,
- M3EMenuWidget item, {
- required bool autofocus,
- 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,
),
),
);
},
),
);
},
);
}