Dart 中带有 google_maps_flutter 的 GestureDetector

GestureDetector with google_maps_flutter in Dart

我正在使用 google_maps_flutter and wish to perform an action when the user performs a gesture on the map, whether it be zoom/tilt/move/rotate. However I'm unable to use the onCameraMoveStarted property in GoogleMap class,因为它还可以识别 non-gesture 引起的用户操作以及编程动画(我的应用程序使用了该动画),但没有办法(据我所知,请更正否则我),以区分它们。

因此我想到了使用 flutter 小部件 GestureDetector,将地图包裹在其中,这样我就可以根据 GestureDetector 检测到的手势更改变量,从而间接导致地图发生变化。

最初没有问题,它充当透明层并且地图可以正常moved/tilted/rotated/zoomed。但是,在添加通过onPanStart、onPanUpdate 或onPanEnd 执行的函数后,都无法通过手势与地图进行交互。我想这一切都被 GestureDetector 捕获了,但是我无法在将手势传递给 child 的同时异步完成上述额外任务吗?

这是结构,顺便说一句:

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

提前致谢,非常感谢任何帮助。

我找到了一个可能适合你的解决方案。

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;
                 });
               }
            })),
        );

这会在每次与地图交互时运行您的函数。 但是我没有找到区分事件的方法。