Dart中的google_maps_flutter与GestureDetector

11
我正在使用google_maps_flutter,希望在用户在地图上执行手势操作时执行某些操作,无论是缩放/倾斜/移动/旋转。然而,我无法在GoogleMap class中使用onCameraMoveStarted属性,因为它还会识别由非手势用户操作引起的编程动画(我的应用程序利用了这些),而且没有办法(据我所知,请指正我)区分它们。
因此,我想到使用flutter widget GestureDetector,将地图包装在其中,以便我能够根据GestureDetector检测到的手势更改变量,从而间接地在地图中引起变化。
最初没有问题,它作为一个透明层,地图可以正常移动/倾斜/旋转/缩放。但是,在添加通过onPanStart、onPanUpdate或onPanEnd执行的函数后,所有手势都无法与地图交互。我想这一切都被GestureDetector捕获了,但是难道我不能异步地执行这个额外的任务,同时仍然将手势传递给子组件吗?
顺便说一下,这是结构:
 build(context) {
    return Scaffold(
      body: GestureDetector(
        behavior: HitTestBehavior.deferToChild,
        onPanStart: {...}
        child:
          GoogleMap(...),
      ),
      ...
    );
  }

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

2个回答

7
我找到了一个解决方案,可能适用于您。
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;
                 });
               }
            })),
        );

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

目前看来,这似乎是唯一可行的解决方法。谢谢! - Twyx

-1

这可能对一些人有所帮助,我在某个地方看到过,但是忘记了。将地图包装在监听器中:

Listener(
        onPointerDown: (e) {
          print("USER IS DRAGGING");
          print(e);
        },

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接