在Ffltter中,我有一个由GestureDetector包装的容器和一个文本子对象.
- GestureDetector
class _ActionButtonState extends State<ActionButton> { bool isPressed = false; @override Widget build(BuildContext context) { return GestureDetector( // hitTestBehavior: HitTestBehavior.translucent, // behavior: HitTestBehavior.translucent, onTapDown: (e) { setState(() { isPressed = true; }); }, onTapCancel: () => setState(() { isPressed = false; }), onTapUp: (e) { setState(() { isPressed = false; }); }, child: AnimatedContainer( duration: Duration(milliseconds: 100), padding: EdgeInsets.only(bottom: isPressed ? 0 : 5), decoration: BoxDecoration( color: AppColor.btnShadowColor, borderRadius: BorderRadius.circular(widget.radius), ), child: Container( padding: EdgeInsets.symmetric(horizontal: 30, vertical: 8), decoration: BoxDecoration( color: AppColor.btnColor, borderRadius: BorderRadius.circular(widget.radius), ), child: Text("Start", style: TextStyle( color: AppColor.whiteText, ),), ), ), ); } }
当指针移动到文本小部件,导致GestureDetector触发onTapCancel时,就会出现问题.因此,该按钮将恢复到其原始状态.
在我看来,鼠标没有被释放,也没有离开容器.因此,不应触发onTapCancel.
我试了很多方法寻找答案,但一无所获. 我希望有人能帮助防止onTapCancel被子元素触发.