import 'package:flutter/material.dart'; /// 按钮按下缩小,离开还原 class SCScaledButton extends StatefulWidget { final Widget child; final VoidCallback? onClick; const SCScaledButton({Key? key, required this.child, this.onClick}) : super(key: key); @override _ScaledButtonState createState() => _ScaledButtonState(); } class _ScaledButtonState extends State with TickerProviderStateMixin{ late AnimationController controller; late Animation tween; @override void initState() { super.initState(); controller = AnimationController(duration: const Duration(milliseconds: 100), vsync: this); tween = Tween(begin:1.0, end:1.5).animate(controller); } @override void dispose() { super.dispose(); controller?.dispose(); } @override Widget build(BuildContext context) { return Material( color: Colors.transparent, child: ScaleTransition( scale: tween, alignment: Alignment.center, child: GestureDetector( behavior: HitTestBehavior.opaque, onTap: widget.onClick, onTapDown: (details){ controller.forward(); }, onTapUp: (details){ controller.reset(); }, onTapCancel: (){ controller.reset(); }, child: widget.child, ), ), ); } }