Flutter GestureDetector 上下滑动切换问题分析与解决
这段代码使用 GestureDetector 组件检测水平方向的手势,并在手势结束时判断速度方向,来实现左右滑动切换功能。然而,在实际使用中,上下滑动时也会产生一定水平速度,导致误触切换操作。
GestureDetector(
onHorizontalDragEnd: (details) {
if (details.velocity.pixelsPerSecond.dx < 0) {
hItems(Global.calendar_current_day.add(Duration(days: 1)));
_calendarAgendaControllerAppBar.goToDay(Global.calendar_current_day);
} else if (details.velocity.pixelsPerSecond.dx > 0) {
hItems(Global.calendar_current_day.subtract(Duration(days: 1)));
_calendarAgendaControllerAppBar.goToDay(Global.calendar_current_day); //
}
},
child: SideMenu(
这段代码会在手势结束时检测水平方向的速度,如果速度为正,则会执行向左滑动的操作,如果速度为负,则会执行向右滑动的操作。这意味着在上下滑动时,也会检测到一定的水平速度,从而导致切换操作的执行。
为了避免误触,建议在检测速度方向之前,先判断手势是否为水平方向。例如,可以添加一个判断条件:
onHorizontalDragEnd: (details) {
if (details.primaryVelocity.abs() > details.horizontalVelocity.abs()) {
// 手势主要为垂直方向,忽略切换操作
return;
}
// ... 其他判断逻辑 ...
},
这样,只有当水平方向的速度大于垂直方向的速度时,才会执行切换操作。
此外,还可以通过添加一个阈值,来过滤掉一些微小的水平速度。例如,可以设置一个阈值为 1000,只有当水平速度大于 1000 时,才会执行切换操作。
onHorizontalDragEnd: (details) {
if (details.horizontalVelocity.abs() > 1000) {
// ... 其他判断逻辑 ...
}
},
通过以上方法,可以有效地避免上下滑动导致的误触切换操作,提高用户体验。
原文地址: https://www.cveoy.top/t/topic/obS6 著作权归作者所有。请勿转载和采集!