resolveItemStyle method
ButtonStyle
resolveItemStyle({
- required bool isGroupingTitle,
- required bool isSelected,
- required bool isMobile,
- ButtonStyle? selectedItemButtonStyle,
- bool mergeSelectedStyle = false,
- ButtonStyle? buttonStyle,
- ItemColor? itemColor,
Resolves which ButtonStyle to apply to a menu item.
When mergeSelectedStyle is false (default):
selectedItemButtonStylereplaces entirely if the item is selectedbuttonStyle— user-provided global style for all items- Default built-in style
When mergeSelectedStyle is true:
- Resolves the base style (buttonStyle or default)
- Merges
selectedItemButtonStyleon top — only the properties defined inselectedItemButtonStyleoverride the base, the rest are preserved from the current style.
Implementation
ButtonStyle resolveItemStyle({
required bool isGroupingTitle,
required bool isSelected,
required bool isMobile,
ButtonStyle? selectedItemButtonStyle,
bool mergeSelectedStyle = false,
ButtonStyle? buttonStyle,
ItemColor? itemColor,
}) {
final baseStyle =
buttonStyle ??
ButtonStyle(
alignment: Alignment.centerLeft,
elevation: const WidgetStatePropertyAll<double>(7.5),
overlayColor: const WidgetStatePropertyAll(Colors.transparent),
backgroundColor: WidgetStateProperty.resolveWith((state) {
return resolveItemBackgroundColor(
widgetState: state,
isGroupingTitle: isGroupingTitle,
isSelected: isSelected,
isMobile: isMobile,
itemColor: itemColor,
);
}),
);
final isItemSelected = isSelected && !isGroupingTitle;
return switch ((
isItemSelected,
selectedItemButtonStyle,
mergeSelectedStyle,
)) {
(true, final selected?, true) => baseStyle.merge(selected),
(true, final selected?, false) => selected,
_ => baseStyle,
};
}