buildByCupertino method

  1. @override
Widget buildByCupertino(
  1. BuildContext context
)

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,
    );
  }
}