如何确定在地图上按下了哪个标记

时间:2019-05-16 22:49:08

标签: google-maps plugins flutter

我无法确定用户在Google地图上点击了哪个标记。我添加了onTap:_onMarkerTapped(MarkerId markerId)事件,在该事件中,我尝试根据点击了哪个标记的用户打开带有更详细的Google Map的另一个页面。当我将一堆标记(作为一组标记)添加到我的Google地图时,我确实使用了唯一的markerId,这就是我作为私有自定义方法_onMarkerTapped()的参数传递的内容。问题是,在此事件中,我总是最终得到最后的markerId,即我添加到集合中的最后一个marker。有没有办法获取用户点击的当前标记?

为我添加到一组标记中的每个标记添加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 :(得分:0)

请注意以下两行:

markerId = MarkerId(i.toString());

...

onTap: () {
  _onMarkerTapped(markerId);
}

您不是在为每个循环创建唯一的MarkerId,而是在重新分配它,所以您分配的最后一个将始终由_onMarkerTapped(markerId)使用。要解决此问题,请使用:

final markerId = MarkerId(i.toString());

答案 1 :(得分:0)

对于遇到此问题的任何人,请遵循https://github.com/flutter/plugins/blob/master/packages/google_maps_flutter/example/lib/place_marker.dart上的代码示例。.特别是_add()方法和_onMarkerTapped()方法。请确保使用地图来声明您的一组标记,例如Map<MarkerId, Marker> markers = <MarkerId, Marker>{};