Flutter / Dart Добавить пользовательский Tap Events для маркера Google Maps - PullRequest
0 голосов
/ 08 января 2019

Как добавить пользовательский обработчик событий касания для маркера Карт Google (google_maps_flutter)? Я вижу только consumeTapEvents, который на самом деле не принимает никаких функций, а только bool. Я думал об использовании GestureDetector, но, похоже, не совсем правильно.

Каков стандартный способ обработки событий на маркерах карты Google? Я пытаюсь перейти на новую страницу при нажатии.

Спасибо

Ответы [ 6 ]

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

Вы можете использовать onTap или onLongPress в плагине карты для мониторинга событий касания. Затем вы можете добавить маркер следующим образом в повернутой позиции

    final Set<Marker> _markers = {};



 GoogleMap(onMapCreated: _onMapCreated,
        initialCameraPosition: CameraPosition(
          target: _center,
          zoom: 13.0,
        ),
        compassEnabled: true,
        tiltGesturesEnabled: false,
        onTap: (latlang){
          if(_markers.length>=1)
            {
              _markers.clear();
            }

          _onAddMarkerButtonPressed(latlang);
        },
        myLocationEnabled: true,
        myLocationButtonEnabled: true,
        mapType: mapType,
        markers: _markers,
        onCameraMove: _onCameraMove,
      ),

где функция _onAddMarkerButtonPressed равна

 void _onAddMarkerButtonPressed(LatLng latlang) {
loadAddress(latlang);
_latLng = latlang;
 setState(() {
  _markers.add(Marker(
    // This marker id can be anything that uniquely identifies each marker.
    markerId: MarkerId(_lastMapPosition.toString()),
    position: latlang,
    infoWindow: InfoWindow(
      title: address,
    //  snippet: '5 Star Rating',
    ),
    icon: BitmapDescriptor.defaultMarker,
  ));
});
}
0 голосов
/ 01 марта 2019

С выпуском версии ^ 0.3.0 + 1 был представлен новый Marker API, который обрабатывает маркеры как виджеты (включая метод onTap ()). Таким образом, у Google Map есть опция markers:, которая допускает список объектов Marker. Каждый из элементов может быть определен так:

Marker(
  markerId: MarkerId("id"), // a string for marker unique id
  icon: BitmapDescriptor.defaultMarker(), // options for hues and custom imgs
  position: LatLng(lat, long), // lat and long doubles

  onTap: () {
    //this is what you're looking for!
  }

),

Гораздо проще, чем прежний подход к контроллеру!

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

Создание пользовательских объектов при создании маркеров.

var map = <String, String> {}; // custom object

for (int i = 0; i < mCrag.length; i++) {
    controller.addMarker(new MarkerOptions(
       icon: BitmapDescriptor.fromAsset('assets/images/down-arrow.png'),
       position: LatLng(double.parse(mCrag[i].lat), double.parse(mCrag[i].lon)),
    )).then((marker) {
         map[marker.id] = mCrag[i].id; // this will return when tap on marker
         return marker;
    });
}

// marker click event
void onMarkerTapped(Marker marker) {
   var selectedMarker = map[marker.id];  // here you will get your id.
   debugPrint(selectedMarker);
   getRoutes(selectedMarker);
}
0 голосов
/ 07 февраля 2019
     void _onMapCreated(GoogleMapController controller){
    this._controller = controller;
    controller.onMarkerTapped.add(_onMarkerTapped);
}

void _onMarkerTapped(Marker marker) {
...
}

Widget build(BuildContext context) {
 ... GoogleMap(
        onMapCreated: _onMapCreated,
        options: GoogleMapOptions(
          ...
        ));
}
0 голосов
/ 02 февраля 2019

Вы можете сделать что-то вроде

_mapController.onMarkerTapped.add((marker) {
      // your code here
    });

Где _mapController является экземпляром GoogleMapController :)

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

Имейте в виду, что текущая версия для разработчиков в версии 0.0.3. Дайте немного времени, чтобы все заработало, пожалуйста!

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