Flutter使用GestureDetector实现滑动容器获取随机值功能异常求助
问题原因及修复方案
- 拼写错误:判断条件中第二个变量名写为
swipingLenght,和你定义的swipingLength不符,少写了一个字母t,会直接导致条件判断逻辑完全失效 - 回调选择错误:
onPanUpdate是滑动过程中每帧都会触发的回调,就算逻辑修正后也会在滑动过程中反复生成随机数,不符合「完成有效滑动后仅触发一次」的需求,应该改用onPanEnd回调,在用户松手、滑动动作结束后再做判断 - 缺少滑动距离计算逻辑:现有代码里没有对
swipingLength赋值的逻辑,没有获取手势的实际位移数据,判断条件没有实际判断依据
你可以参考以下修正后的实现代码:
首先在当前State类中提前定义必要的存储变量:
// 定义在State类的属性区域 double? _startSwipeX; int num = 0; final random = Random();
再修改GestureDetector的回调配置:
GestureDetector( // 记录滑动起始的X轴坐标 onPanStart: (details) { _startSwipeX = details.localPosition.dx; }, // 滑动结束后统一判断 onPanEnd: (details) { if (_startSwipeX == null) return; // 计算滑动总位移 final swipingLength = details.localPosition.dx - _startSwipeX!; // 位移绝对值大于5即触发,和你不限滑动方向的需求匹配 if (swipingLength.abs() > 5) { setState(() { num = random.nextInt(100); }); } // 重置起始坐标,避免后续误触发 _startSwipeX = null; }, child: // 替换为你自己的滑动容器组件 )
如果需要同时支持上下滑动触发,把上述代码中的X轴坐标获取换成Y轴即可,也可以同时判断两个轴的位移绝对值,满足任意一个维度的阈值就触发。
内容的提问来源于stack exchange,提问作者B. Mercan
相关产品推荐
相关产品推荐

