import 'package:flutter/material.dart'; class FontConstants { static const String fontFamily = 'Proxima Nova'; } class ZoomIconButton extends StatefulWidget { final VoidCallback onTap; final IconData icon; final double size; final Color color; const ZoomIconButton({ Key? key, required this.onTap, this.icon = Icons.more_vert, this.size = 24, this.color = Colors.black, }) : super(key: key); @override State createState() => _ZoomIconButtonState(); } class _ZoomIconButtonState extends State { double _scale = 1.0; void _onTapDown(TapDownDetails details) { setState(() { _scale = 1.2; // zoom in }); } void _onTapUp(TapUpDetails details) { setState(() { _scale = 1.0; // zoom back }); widget.onTap(); // trigger your action } void _onTapCancel() { setState(() { _scale = 1.0; // reset if cancelled }); } @override Widget build(BuildContext context) { return GestureDetector( onTapDown: _onTapDown, onTapUp: _onTapUp, onTapCancel: _onTapCancel, child: AnimatedScale( scale: _scale, duration: const Duration(milliseconds: 100), curve: Curves.easeInCirc, child: Icon( widget.icon, size: widget.size, color: widget.color, ), ), ); } }