import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; class ScaleButton extends StatefulWidget { final Widget child; final VoidCallback? onPressed; final Duration duration; final double scale; const ScaleButton({ super.key, required this.child, required this.onPressed, this.duration = const Duration(milliseconds: 100), this.scale = 0.95, }); @override State createState() => _ScaleButtonState(); } class _ScaleButtonState extends State { bool _isPressed = false; @override Widget build(BuildContext context) { return GestureDetector( onTapDown: (_) => setState(() => _isPressed = true), onTapUp: (_) { setState(() => _isPressed = false); widget.onPressed?.call(); }, onTapCancel: () => setState(() => _isPressed = false), child: widget.child .animate(target: _isPressed ? 1 : 0) .scaleXY(end: widget.scale, duration: widget.duration), ); } }