Flutter GestureDetector 上下滑动切换问题解决方法
这段代码使用了 GestureDetector 来监听水平方向的滑动事件,因此在上下滑动时也会触发。要避免上下滑动时切换,可以使用 GestureDetector 的 onVerticalDragStart、onVerticalDragUpdate、onVerticalDragEnd 等事件来监听垂直方向的滑动事件,并在这些事件中进行相应的处理。具体来说,在 onVerticalDragStart 事件中记录当前的位置,然后在 onVerticalDragUpdate 事件中计算滑动距离,如果超过一定阈值,则禁止切换。在 onVerticalDragEnd 事件中清除记录的位置信息即可。
改进后的代码如下:
bool _isVerticalDrag = false;
Offset _dragStartPos;
body: GestureDetector(
onHorizontalDragEnd: (details) {
if (!_isVerticalDrag) {
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);
}
}
},
onVerticalDragStart: (details) {
_isVerticalDrag = true;
_dragStartPos = details.globalPosition;
},
onVerticalDragUpdate: (details) {
if (_isVerticalDrag) {
double dy = details.globalPosition.dy - _dragStartPos.dy;
if (dy.abs() > 50) { // 阈值设为50
_isVerticalDrag = false;
}
}
},
onVerticalDragEnd: (details) {
_isVerticalDrag = false;
_dragStartPos = null;
},
child: SideMenu(
// ...
),
);
原文地址: https://www.cveoy.top/t/topic/obTe 著作权归作者所有。请勿转载和采集!