buildByMaterial method
build on material mode
Implementation
@override
Widget buildByMaterial(BuildContext context) {
// Build menu items with submenu support for Material fallback
final menuItemIndex = _MenuItemIndexCounter();
final menuItems = _buildMaterialMenuItems(context, items, menuItemIndex);
final theme = Theme.of(context);
final colorScheme = theme.colorScheme;
if (_isIconButton && buttonIcon != null) {
return PopupMenuButton<int>(
itemBuilder: (context) => menuItems,
onSelected: (index) => onSelected?.call(index),
enabled: enabled,
icon: Icon(
_getIconData(buttonIcon!.name),
size: size * 0.5,
color: colorScheme.onSurfaceVariant,
),
// Material 3 styling
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
elevation: 3,
surfaceTintColor: colorScheme.surfaceTint,
);
} else if (buttonLabel != null) {
return PopupMenuButton<int>(
itemBuilder: (context) => menuItems,
onSelected: (index) => onSelected?.call(index),
enabled: enabled,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
buttonLabel!,
style: theme.textTheme.labelLarge?.copyWith(
color: colorScheme.onSurface,
),
),
const SizedBox(width: 4),
Icon(
Icons.arrow_drop_down,
size: 20,
color: colorScheme.onSurfaceVariant,
),
],
),
),
// Material 3 styling
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
elevation: 3,
surfaceTintColor: colorScheme.surfaceTint,
);
}
return const SizedBox.shrink();
}