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