我想创建一个 Google 地图小部件,它不会处理任何点击、手势 - 只是一个静态地图。 我知道我需要以某种方式设置
gestureRecognizers
但无法弄清楚哪个类将锁定所有手势。我应该用什么来代替 ScaleGestureRecognizer()
?
将
gestureRecognizers
设置为 null 没有帮助。
当此集合为空或 null 时,地图将仅处理未由任何其他手势识别器声明的手势的指针事件。
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class StaticMap extends StatelessWidget {
final CameraPosition cameraPosition;
StaticMap(this.cameraPosition);
@override
Widget build(BuildContext context) {
return GoogleMap(
mapType: MapType.normal,
initialCameraPosition: cameraPosition,
gestureRecognizers: {
Factory<OneSequenceGestureRecognizer>(() => ScaleGestureRecognizer()),
},
);
}
}
尝试使用 AbsorbPointer
制作
GoogleMap
的 child
AbsorbPointer
并将其 absorbing
属性设置为 true
return AbsorbPointer(
absorbing: true,
child: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: cameraPosition,
gestureRecognizers: {
Factory<OneSequenceGestureRecognizer>(() => ScaleGestureRecognizer()),
}
)
);
当你想检测事件时,你也可以设置它的
absorbing
属性 false
有关
AbsorbPointer
的更多信息,请参阅此处
对于 web 和 iOS,您可能想尝试 Flutter 的 pointer_interceptor 包。
PointerInterceptor
是一个小部件,可防止鼠标事件被 Web 中的底层 HtmlElementView
或 iOS 上的底层 PlatformView
捕获。您只需将覆盖在视图顶部的元素包装在 PointerInterceptor
中,它们的鼠标就会按预期工作。
假设这个 ElevatedButton 放置在 Stack 中的 Map 顶部,并且您想要忽略该区域下方的指针。就这样做吧:
PointerInterceptor(
child: ElevatedButton(...),
)
Flutter 存储库上的相关问题:[web] IgnorePointer 或 AbsorbPointer 不适用于 DomCanvas 上的 HtmlElementView