我正在使用google_maps_flutter,并且希望在用户在地图上执行手势时执行手势,无论手势是缩放/倾斜/移动/旋转。但是,我无法使用onCameraMoveStarted中的GoogleMap class属性,因为它也可以识别导致的非手势用户操作以及已编程的动画(我的应用程序利用了该动画),但无法(就我而言)知道,否则请纠正我),以区分它们。
因此,我想到了使用颤动小部件GestureDetector,将地图包装在其中,以便能够根据GestureDetector检测到的手势来更改变量,从而间接导致地图中的更改。
最初没有问题,它充当透明层,可以正常移动/倾斜/旋转/缩放地图。但是,在添加要通过onPanStart,onPanUpdate或onPanEnd执行的功能时,所有这些都将使地图无法通过手势进行交互。我想这都是由GestureDetector捕获的,但是当将手势传递给孩子时,我无法异步执行额外的任务吗?
这是结构,顺便说一句:
build(context) {
return Scaffold(
body: GestureDetector(
behavior: HitTestBehavior.deferToChild,
onPanStart: {...}
child:
GoogleMap(...),
),
...
);
}
在此先感谢您的帮助。
答案 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;
});
}
})),
);
这会在与地图的每次互动中运行您的功能。 但是我没有找到区分事件的方法。