Flutter:创建仅响应双指手势的GestureRecognizer并透传单指手势
解决方案
要实现地图仅响应双指手势、单指手势交由ScrollView处理的效果,你可以替换EagerGestureRecognizer为自定义的手势识别器,只在检测到双指触摸时才让GoogleMap接管事件:
1. 自定义双指手势识别器
创建一个继承自OneSequenceGestureRecognizer的类,仅在存在两个触摸指针时才接收手势:
class MapTwoFingerGestureRecognizer extends OneSequenceGestureRecognizer { @override void addPointer(PointerDownEvent event) { // 仅当已有一个手指按下(当前是第二个手指)时,才接管手势 if (pointers.length == 1) { startTrackingPointer(event.pointer); resolve(GestureDisposition.accepted); } else { stopTrackingPointer(event.pointer); resolve(GestureDisposition.rejected); } } @override String get debugDescription => 'map_two_finger_gesture_recognizer'; @override void didStopTrackingLastPointer(int pointer) {} }
2. 在GoogleMap中使用该识别器
将gestureRecognizers配置替换为自定义识别器的工厂:
GoogleMap( // 你的其他地图配置(如initialCameraPosition等) gestureRecognizers: { Factory<OneSequenceGestureRecognizer>( () => MapTwoFingerGestureRecognizer(), ), }, )
原理说明
这个自定义识别器会在单指触摸时直接拒绝接管事件,让SingleChildScrollView处理单指拖拽滚动;只有当检测到第二个手指按下时,才会接受手势,让GoogleMap响应双指缩放、双指拖拽操作。
内容的提问来源于stack exchange,提问作者Luke Hutchison
相关产品推荐
相关产品推荐

