outlined static method

Widget outlined({
  1. required BuildContext context,
  2. required String title,
  3. required VoidCallback? onPressed,
  4. bool isDisabled = false,
  5. TextStyle? titleStyle,
  6. Color? borderColor,
  7. Color? backgroundColor,
  8. double backgroundOpacity = 0.0,
  9. double height = 50,
  10. double horizontalPadding = 20,
  11. double? width,
  12. double borderRadius = 12,
  13. double borderWidth = 1.5,
  14. Color? shadowColor,
  15. double shadowBlurRadius = 0,
  16. IconData? icon,
  17. Color? iconColor,
  18. double iconSize = 22,
  19. Position iconPosition = Position.leading,
  20. Position labelPosition = Position.center,
})

Implementation

static Widget outlined({
  required BuildContext context,
  required String title,
  required VoidCallback? onPressed,
  bool isDisabled = false,
  TextStyle? titleStyle,
  Color? borderColor,
  Color? backgroundColor,
  double backgroundOpacity = 0.0,
  double height = 50,
  double horizontalPadding = 20,
  double? width,
  double borderRadius = 12,
  double borderWidth = 1.5,
  Color? shadowColor,
  double shadowBlurRadius = 0,
  IconData? icon,
  Color? iconColor,
  double iconSize = 22,
  Position iconPosition = Position.leading,
  Position labelPosition = Position.center,
}) {
  final scale = DeviceHelper.getScalingFactor(context);

  final effectiveBorder = isDisabled
      ? Colors.grey.shade400
      : borderColor ?? Colors.black;

  final effectiveBackground = isDisabled
      ? Colors.grey.withValues(alpha: 0.1)
      : backgroundColor?.withValues(alpha: backgroundOpacity);

  final effectiveTitleStyle = isDisabled
      ? titleStyle?.copyWith(color: Colors.grey)
      : titleStyle;

  final effectiveIconColor = isDisabled
      ? Colors.grey
      : iconColor ?? titleStyle?.color;

  return CupertinoButton(
    padding: EdgeInsets.zero,
    borderRadius: BorderRadius.circular(borderRadius * scale),
    color: Colors.transparent,
    onPressed: isDisabled ? null : onPressed,
    child: AnimatedOpacity(
      duration: const Duration(milliseconds: 150),
      opacity: isDisabled ? 0.5 : 1.0,
      child: Container(
        width: width != null ? width * scale : double.infinity,
        height: height * scale,
        padding: EdgeInsets.symmetric(horizontal: horizontalPadding * scale),
        decoration: BoxDecoration(
          color: effectiveBackground,
          borderRadius: BorderRadius.circular(borderRadius * scale),
          border: Border.all(
            color: effectiveBorder,
            width: borderWidth * scale,
          ),
          boxShadow: !isDisabled && shadowBlurRadius > 0
              ? [
                  BoxShadow(
                    color:
                        shadowColor?.withValues(alpha: 0.3) ?? Colors.black26,
                    blurRadius: shadowBlurRadius * scale,
                    offset: Offset(0, 2 * scale),
                  ),
                ]
              : null,
        ),
        child: _buildContent(
          context: context,
          title: title,
          titleStyle: effectiveTitleStyle,
          icon: icon,
          iconColor: effectiveIconColor,
          iconSize: iconSize,
          iconPosition: iconPosition,
          labelPosition: labelPosition,
        ),
      ),
    ),
  );
}