Как определить, какой маркер был нажат на карте - PullRequest
0 голосов
/ 17 мая 2019

Я не могу определить, какой маркер был отмечен пользователем на картах Google. Я добавил событие onTap: _onMarkerTapped (MarkerId markerId), в котором я пытаюсь открыть еще одну страницу с более подробной Картой Google, в зависимости от того, какой пользователь маркера нажал. Когда я добавляю набор маркеров (в виде набора маркеров) на свою карту Google, я использую уникальный markerId, и это то, что я передаю в качестве аргумента частному пользовательскому методу _onMarkerTapped (). Проблема в том, что внутри этого события я всегда получал последний маркер, то есть последний маркер, который я добавил в набор. Есть ли способ получить текущий маркер, который пользователь нажал?

добавить обработчик события onTap для каждого маркера, который я добавил в набор маркеров

for (var campusData in Campuses.campusLocations) {
      campusDetails = json.decode(campusData);
      campus = Campus.fromJson(campusDetails);
      markerId = MarkerId(i.toString());
      mrkr = new Marker(
          markerId: markerId, // a string for marker unique id
          icon: BitmapDescriptor.fromAsset(
              'assets/wsu@2x.png'), // options for hues and custom imgs
          position:
              LatLng(campus.latitude, campus.longitude), // lat and long doubles
          onTap: () {
            _onMarkerTapped(markerId);
          });
      campusMarkers.add(mrkr);
      i++;
    }
    return GoogleMap(
      initialCameraPosition: cameraPosition,
      onMapCreated: _onMapCreated,
      mapType: MapType.normal,
      markers: campusMarkers, 
      onTap: (lng) => _onMapTapped(lng),
    );

void _onMarkerTapped(MarkerId markerId) {
    final Marker tappedMarker = campusMarkers.elementAt(int.parse(markerId.value));
    if (tappedMarker != null) {

    }
    else{
      print("Tapped marker is NULL..");
    }
  }

Ищет способы определить, какой маркер был прослушан пользователем

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Для всех, кто сталкивался с этой проблемой, следуйте примеру кода в https://github.com/flutter/plugins/blob/master/packages/google_maps_flutter/example/lib/place_marker.dart .. особенно метод _add () и методы _onMarkerTapped (). ПОЖАЛУЙСТА, обязательно используйте Карту, чтобы объявить свой набор маркеров, например. Map<MarkerId, Marker> markers = <MarkerId, Marker>{};

0 голосов
/ 17 мая 2019

Обратите внимание на эти две строки:

markerId = MarkerId(i.toString());

...

onTap: () {
  _onMarkerTapped(markerId);
}

Вы не создаете уникальный MarkerId для каждого цикла, вы просто переназначаете его, поэтому последний из назначенных вами всегда будет использоваться _onMarkerTapped(markerId). Чтобы это исправить, используйте:

final markerId = MarkerId(i.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...