Flutter中的Google地图未响应触摸事件

moo*_*der 8 google-maps dart flutter

在Flutter应用程序中,我有两个使用Google Map(由此提供)的不同屏幕。

第一个的小部件结构是

支架-> ListView->可见性->中心-> SizedBox-> GoogleMap

第二屏是

脚手架->容器->列-> SizedBox-> GoogleMap

在两个屏幕上,我都设置了相同的地图设置,但是由于某些原因,在第一个屏幕上,地图没有响应任何触摸事件。

小智 13

我遇到了同样的问题,经过长时间的搜索,我找到了以下解决方案,因此它可以正常工作

GoogleMap(
   gestureRecognizers: <Factory<OneSequenceGestureRecognizer>>[
      new Factory<OneSequenceGestureRecognizer>(() => new EagerGestureRecognizer(),),
   ].toSet(),)
Run Code Online (Sandbox Code Playgroud)

参考:

管理两个小部件之间的手势优先级

姿势手势识别器

  • 我认为出于某种原因,这个比其他的工作效率更高。手势速度更快。 (7认同)

Jor*_*ies 11

您需要GoogleMap通过设置gestureRecognizers属性来告知小部件您希望其响应的手势,如下所示:

import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

...

GoogleMap(
  initialCameraPosition: CameraPosition(
    target: LatLng(0, 0),
  ),
  gestureRecognizers: Set()
    ..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
);
Run Code Online (Sandbox Code Playgroud)

这不是特定于GoogleMap窗口小部件的,您需要对使用AndroidView/ UIKitView在幕后使用/ 处理手势的任何窗口小部件进行此操作。

  • @moonvader您是否找到解决方案?我遇到了同样的问题。当我添加VerticalDragGestureRecognizer时,它曾经可以工作,但现在却没有。编辑:找到解决方案。我只是从下面的答案中添加了手势识别器。 (2认同)

mne*_*c23 5

我有类似的问题,但在我的情况下,地图位于条子列表内(实际上是 SliverPercientHeader )。添加平移手势有效,但我仍然无法垂直滚动地图。所以我也添加了它VerticalDragGestureRecognizer并且它按预期工作。

GoogleMap(
    gestureRecognizers: Set()
      ..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
      ..add(Factory<VerticalDragGestureRecognizer>(
          () => VerticalDragGestureRecognizer())),
    // rest code
),
Run Code Online (Sandbox Code Playgroud)

注意:您还可以添加另一个gestureRecognizer,例如:ScaleGestureRecognizer


sie*_*ega 5

我认为这取决于您的父窗口小部件支持哪种手势。

这种方式对我有用。我的地图在TabBarView > ListView > GoogleMap

 GoogleMap(
      gestureRecognizers: Set()
        ..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
        ..add(Factory<ScaleGestureRecognizer>(() => ScaleGestureRecognizer()))
        ..add(Factory<TapGestureRecognizer>(() => TapGestureRecognizer()))
        ..add(Factory<VerticalDragGestureRecognizer>(
            () => VerticalDragGestureRecognizer())),
Run Code Online (Sandbox Code Playgroud)