静态谷歌地图(禁用所有手势)

问题描述 投票:0回答:2

我想创建一个 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()),
      },
    );
  }
}
flutter flutter-layout flutter-plugin
2个回答
9
投票

尝试使用 AbsorbPointer

制作

GoogleMap
child
AbsorbPointer
并将其
absorbing
属性设置为
true

return AbsorbPointer(
  absorbing: true,
  child: GoogleMap(
    mapType: MapType.normal,
    initialCameraPosition: cameraPosition,
    gestureRecognizers: {
    Factory<OneSequenceGestureRecognizer>(() => ScaleGestureRecognizer()),
    }
  )
);

当你想检测事件时,你也可以设置它的

absorbing
属性
false

有关

AbsorbPointer
的更多信息,请参阅此处


0
投票

对于 webiOS,您可能想尝试 Flutter 的 pointer_interceptor 包。

PointerInterceptor
是一个小部件,可防止鼠标事件被 Web 中的底层
HtmlElementView
或 iOS 上的底层
PlatformView
捕获。您只需将覆盖在视图顶部的元素包装在
PointerInterceptor
中,它们的鼠标就会按预期工作。

示例

假设这个 ElevatedButton 放置在 Stack 中的 Map 顶部,并且您想要忽略该区域下方的指针。就这样做吧:

PointerInterceptor(
  child: ElevatedButton(...),
)

Flutter 存储库上的相关问题:[web] IgnorePointer 或 AbsorbPointer 不适用于 DomCanvas 上的 HtmlElementView

© www.soinside.com 2019 - 2024. All rights reserved.