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;
});
}
})),
);
这会在每次与地图交互时运行您的函数。
但是我没有找到区分事件的方法。
我正在使用 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;
});
}
})),
);
这会在每次与地图交互时运行您的函数。 但是我没有找到区分事件的方法。