Flutter中如何重构手势检测器?重构后点击文本无响应问题求助
嘿,我一眼就瞅见你重构后点击没反应的问题在哪了!
问题出在回调函数的写法上
你原来的代码里,onTap: () => onTap这行其实是个小坑——这个匿名函数只是返回了onTap这个函数对象,根本没去执行它!之前直接写的时候可能碰巧没暴露问题,但重构后这个写法就直接导致点击事件没触发实际的逻辑。
给你修正后的重构函数
你得把gestureTextDetector写成这样,确保回调被正确执行:
Widget gestureTextDetector(String data, VoidCallback onTap) { return Row( mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ GestureDetector( child: Text( data, style: TextStyle(color: Colors.grey, fontSize: 16), ), // 这里直接把传入的回调赋值给onTap,系统会自动执行它 onTap: onTap, // 或者也可以写成 onTap: () => onTap(), 两种写法效果一致 ), ], ); }
然后你原来的调用方式完全没问题:
gestureTextDetector( "Hello", ()=> Navigator.push(context, MaterialPageRoute(builder: (context) => LoginForm())) )
为啥TextFormField重构就没问题?
因为TextFormField的回调(比如onChanged)设计就是直接接收函数对象,你传递过去后系统会自动触发执行;但你之前在GestureDetector里错误地用了() => onTap这种写法,相当于只返回了函数没调用,重构后这个问题就直接显现出来了。
内容的提问来源于stack exchange,提问作者nzxcvbnm
相关产品推荐
相关产品推荐

