Dart中带有google_maps_flutter的GestureDetector

时间:2019-07-16 15:49:42

标签: google-maps flutter dart uigesturerecognizer

我正在使用google_maps_flutter,并且希望在用户在地图上执行手势时执行手势,无论手势是缩放/倾斜/移动/旋转。但是,我无法使用onCameraMoveStarted中的GoogleMap class属性,因为它也可以识别导致的非手势用户操作以及已编程的动画(我的应用程序利用了该动画),但无法(就我而言)知道,否则请纠正我),以区分它们。

因此,我想到了使用颤动小部件GestureDetector,将地图包装在其中,以便能够根据GestureDetector检测到的手势来更改变量,从而间接导致地图中的更改。

最初没有问题,它充当透明层,可以正常移动/倾斜/旋转/缩放地图。但是,在添加要通过onPanStart,onPanUpdate或onPanEnd执行的功能时,所有这些都将使地图无法通过手势进行交互。我想这都是由GestureDetector捕获的,但是当将手势传递给孩子时,我无法异步执行额外的任务吗?

这是结构,顺便说一句:

 build(context) {
    return Scaffold(
      body: GestureDetector(
        behavior: HitTestBehavior.deferToChild,
        onPanStart: {...}
        child:
          GoogleMap(...),
      ),
      ...
    );
  }

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我找到了一个可能对您有用的解决方案。

class Test extends DragGestureRecognizer {
  Function _test;

  Test(this._test);

  @override
  void resolve(GestureDisposition disposition) {
    super.resolve(disposition);
    this._test();
  }
}

...

return GoogleMap(
        ...
          gestureRecognizers: Set()
            ..add(Factory<DragGestureRecognizer>(() => Test(() {
               if (_focusEnabled) {
                 setState(() {
                   _focusEnabled = false;
                 });
               }
            })),
        );

这会在与地图的每次互动中运行您的功能。 但是我没有找到区分事件的方法。