buildByCupertino method

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

*** material properties end ***

Implementation

@override
Widget buildByCupertino(BuildContext context) {
  final Color _disabledColor = valueOf('disabledColor', disabledColor) ?? CupertinoColors.quaternarySystemFill;
  final VoidCallback? _onPressed = valueOf('onPressed', onPressed);
  final bool _adaptiveHaptics = valueOf('adaptiveHaptics', adaptiveHaptics);

  // Enhanced onPressed with haptic feedback
  VoidCallback? _enhancedOnPressed;
  if (_onPressed != null) {
    _enhancedOnPressed = () {
      if (_adaptiveHaptics) {
        HapticFeedback.selectionClick(); // Lighter feedback for icon buttons
      }
      _onPressed();
    };
  }

  // Determine which icon to use
  Widget iconWidget;
  final String? _symbol = valueOf('symbol', symbol);
  final IconData? _icon = valueOf('icon', icon);
  final double _iconSize = valueOf('iconSize', iconSize);
  final Color? _color = valueOf('color', color);

  if (_symbol != null && _symbol.isNotEmpty) {
    // Use native SF Symbol via CNIcon (includes built-in liquid glass effects)
    iconWidget = CNIcon(
      symbol: CNSymbol(_symbol, size: _iconSize),
      size: _iconSize,
      color: _color,
    );
  } else if (_icon != null) {
    // Use standard Icon
    iconWidget = Icon(
      _icon,
      size: _iconSize,
      color: _color,
    );
  } else {
    // Fallback to empty icon
    iconWidget = Icon(
      CupertinoIcons.question_circle,
      size: _iconSize,
      color: _color,
    );
  }

  return CupertinoButton(
    child: iconWidget,
    padding: valueOf('padding', padding),
    disabledColor: _disabledColor,
    minSize: valueOf('minSize', minSize),
    pressedOpacity: valueOf('pressedOpacity', pressedOpacity),
    borderRadius: valueOf('borderRadius', borderRadius),
    alignment: valueOf('alignment', alignment),
    onPressed: _enhancedOnPressed,
  );
}