buildByCupertino method
build on cupertino mode (Flutter implementation)
Implementation
@override
Widget buildByCupertino(BuildContext context) {
if (!valueOf('useCNPopupMenuButton', useCNPopupMenuButton)) {
return _buildMaterialPopupMenu(context);
}
// Convert BasePopupMenuItem to CNPopupMenuItem
final cnItems = items.map((item) {
if (item.isDivider) {
return const CNPopupMenuDivider();
}
CNSymbol? icon;
if (item.iosIcon != null) {
icon = CNSymbol(item.iosIcon!, size: item.iconSize ?? 18);
} else if (item.iconData != null) {
// Try to map Material icon to SF Symbol
final sfSymbol = _mapIconToSFSymbol(item.iconData);
if (sfSymbol != null) {
icon = CNSymbol(sfSymbol, size: item.iconSize ?? 18);
}
}
return CNPopupMenuItem(
label: item.label,
icon: icon,
enabled: item.enabled,
);
}).toList();
if (_isIconButton) {
return CNPopupMenuButton.icon(
buttonIcon: CNSymbol(
valueOf('iosIcon', iosIcon) ?? 'ellipsis',
size: 18,
),
size: valueOf('size', size),
items: cnItems,
onSelected: valueOf('onSelected', onSelected),
buttonStyle: valueOf('buttonStyle', buttonStyle) ?? CNButtonStyle.plain,
);
} else {
return CNPopupMenuButton(
buttonLabel: valueOf('buttonLabel', buttonLabel) ?? 'Menu',
items: cnItems,
onSelected: valueOf('onSelected', onSelected),
buttonStyle: valueOf('buttonStyle', buttonStyle) ?? CNButtonStyle.plain,
);
}
}