Я использую google_maps_flutter и хочу выполнить действие, когда пользователь выполняет жест на карте, будь то масштабирование/наклон/перемещение/поворот. Однако я не могу использовать свойство onCameraMoveStarted в Класс GoogleMap, поскольку оно также распознает действия пользователя, не связанные с жестами, а также запрограммированные анимации (которые использует мое приложение) никоим образом (насколько мне известно, пожалуйста, исправьте меня в противном случае), чтобы различать их.
Таким образом, я подумал об использовании виджета флаттера Детектор жестов, обернув карту внутри него, чтобы я мог изменять переменные на основе жестов, обнаруженных GestureDetector, чтобы косвенно вызывать изменения в карте.
Поначалу проблем не возникает, он работает как прозрачный слой, и карту можно перемещать/наклонять/вращать/масштабировать как обычно. Однако при добавлении функции для выполнения через onPanStart, onPanUpdate или onPanEnd все делают карту невозможной для взаимодействия с помощью жестов. Я предполагаю, что все это фиксируется GestureDetector, но нет ли способа выполнить указанную дополнительную задачу асинхронно, в любом случае передавая жест ребенку?
Вот структура, кстати:
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;
});
}
})),
);
Это запускает вашу функцию при каждом взаимодействии с картой. Но я не нашел способа различать события.
Кажется, это единственный рабочий метод для этой ситуации в настоящее время. Спасибо!