2

我正在尝试获取用户是否使用 GestureDetector 小部件水平或垂直滑动。出于某种原因,我无法使 onVerticalDragEnd 属性工作。Horizo​​ntalDragEnd 工作得很好。

我应该添加其他东西吗?

`

child: new GestureDetector(
                  onHorizontalDragEnd: (DragEndDetails details) {
                    print("horizontal drag");
                  },
                  onVerticalDragEnd : (DragEndDetails details) {
                    print("vertical drag");
                  } ,
                  child: new GridView.count(..

`

4

4 回答 4

1

Try logging when your GestureDetector and/or parent components are being created, and see if it's being re-rendered before the End event. I had the same problem, and it was due to side effects of the Update event I used causing a re-render. After making some modifications to prevent that from happening, the End event started working.

于 2018-10-28T17:20:27.277 回答
1

代替 GestureDetector,你可以使用 Listener,它对我有用。这是我实现它的方式 -

import 'dart:math';
double radians(double degree) {
    return ((degree * 180) / pi);
  }
void swipe(moveEvent) {
double angle = radians(moveEvent.delta.direction);
    if (angle >= -45 && angle <= 45) {
      print("Swipe Right");
    } else if (angle >= 45 && angle <= 135) {
      print("Swipe Down");
    } else if (angle <= -45 && angle >= -135) {
      print("Swipe Up");
    } else {
      print("Swipe Left");
    }
}
child: Listener(
  onPointerMove: (moveEvent) => swipe(moveEvent),
  child: GridView.count(...),
)

但这会在一次滑动中多次调用函数

于 2021-02-24T11:36:26.913 回答
0

再会,

这不起作用的原因是您无法同时指定onHorizontalDragonVerticalDrag。这样做会导致其中一个识别器被忽略。在这种情况下,似乎垂直手势被忽略而有利于水平。

参考:https ://github.com/flutter/flutter/blob/03a1f4acb315bd5cd99c5cafe19a4875f9f98422/packages/flutter/lib/src/widgets/gesture_detector.dart#L187

希望这可以为您解决问题:)

于 2018-07-10T00:31:56.953 回答
0

看起来 GridView 小部件正在捕捉垂直拖动手势。可能不是最佳解决方案,但通过将 GestureDetector 小部件作为每个 GridView 子级的父级,我能够完成这项工作。

于 2019-01-28T16:06:32.460 回答