这段代码使用 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) {
      // ... 其他判断逻辑 ...
    }
  },

通过以上方法,可以有效地避免上下滑动导致的误触切换操作,提高用户体验。

Flutter GestureDetector 上下滑动切换问题分析与解决

原文地址: https://www.cveoy.top/t/topic/obS6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录