Карта Google во Флаттере не отвечает на сенсорные события - PullRequest
0 голосов
/ 20 января 2019

В приложении Flutter есть два разных экрана, которые используют Google Map (предоставляется этой библиотекой ).

Структура виджета для первого:

Scaffold-> ListView -> Visibility -> Center -> SizedBox -> GoogleMap

и для второго экрана это

Scaffold -> Container -> Column -> SizedBox -> GoogleMap

На обоих экранах я получил одинаковые настройки карты, но по какой-то причине на первом экране карта не реагирует на сенсорные события.

Ответы [ 6 ]

0 голосов
/ 18 июля 2019

У меня была та же проблема, и я нашел следующее решение после долгого поиска, просто так оно будет работать

GoogleMap(
   gestureRecognizers: <Factory<OneSequenceGestureRecognizer>>[
      new Factory<OneSequenceGestureRecognizer>(() => new EagerGestureRecognizer(),),
   ].toSet(),)

Ссылка:

Управление приоритетом жестовмежду двумя виджетами

пропридада жестов-распознавателей

0 голосов
/ 01 апреля 2019

Я думаю, это зависит от того, какие жесты поддерживает ваш родительский виджет.

Этот способ работает для меня. Моя карта в TabBarView > ListView > GoogleMap

 GoogleMap(
      gestureRecognizers: Set()
        ..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
        ..add(Factory<ScaleGestureRecognizer>(() => ScaleGestureRecognizer()))
        ..add(Factory<TapGestureRecognizer>(() => TapGestureRecognizer()))
        ..add(Factory<VerticalDragGestureRecognizer>(
            () => VerticalDragGestureRecognizer())),
0 голосов
/ 05 марта 2019

У меня похожая проблема, но в моем случае карта находится внутри списка (на самом деле SliverPersistentHeader).Добавление жеста панорамирования сработало, но я все еще не могу прокрутить карту по вертикали.Поэтому я также добавил VerticalDragGestureRecognizer, и это сработало, как и ожидалось.

GoogleMap(
    gestureRecognizers: Set()
      ..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
      ..add(Factory<VerticalDragGestureRecognizer>(
          () => VerticalDragGestureRecognizer())),
    // rest code
),

Примечание: Вы также можете добавить еще один gestRecognizer, например: ScaleGestureRecognizer.

0 голосов
/ 03 февраля 2019

Имейте в виду, что google_maps_flutter - это предварительная версия для разработчиков, версия 0.2.Пожалуйста, будьте терпеливы, чтобы добавить дополнительные функции.

0 голосов
/ 25 января 2019

Вы должны указать виджету 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()))
);

Это не относится к GoogleMapвиджет, вам нужно будет сделать это с любым виджетом, который использует AndroidView / UIKitView под крышками для обработки жестов, когда он находится внутри прокручиваемого представления.

0 голосов
/ 24 января 2019

Глядя на структуру виджета для первого экрана, я думаю, что проблема в том, что используемый ListView остается прокручиваемым. Благодаря этому все события касания распространяются на ListView вместо карты.

Можете ли вы попробовать добавить параметр physics в ListView? Вы можете попробовать добавить

ListView(
  physics: NeverScrollableScrollPhysics(),
  /*Rest of the ListView implementation*/
)

Обновление: рабочий пример

 return Scaffold(
    body: ListView(
      itemExtent: MediaQuery.of(context).size.height*1.2,
      children: <Widget>[
        Column(
          mainAxisSize: MainAxisSize.max,
          children: <Widget>[
            buildMap(), /*The map function*/
            Container(
               /*Any other child widget*/
            )
          ],
        ),
        /*Any other child widgets in the List*/
      ],
    )
  );

Примечание. Для работы прокрутки карты необходимо начать прокрутку в горизонтальном направлении, поскольку в случае вертикальной прокрутки по умолчанию будет использоваться ListView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...