扑谷歌地图:更新标记

时间:2019-12-24 12:34:15

标签: google-maps flutter dart

我正在尝试更新标记的坐标(Google Maps flutter)

我正在像这样“创建”标记。

 Map<MarkerId, Marker> markers = <MarkerId, Marker>{};

Uint8List resizedMarkerImageBytesTemp = await convertUserImage(
        "imgurl");

    MarkerId id = MarkerId(uid);
    Marker _marker = Marker(
      markerId: id,
      onTap: () {
        print("tapped");
      },
      position: LatLng(lat, lng),
      icon: BitmapDescriptor.fromBytes(resizedMarkerImageBytesTemp),
      infoWindow: InfoWindow(title: 'myTitle'),
    );
    setState(() {
      markers[id] = _marker;
    });

更新标记坐标的最佳/最有效方法是什么?

谢谢!

更新:我尝试了以下方法。

MarkerId id = MarkerId(uid); //uid of the marker I want to update

 markers[id].position.longitude = 3.12493;

但是然后我得到了错误:

error: 'longitude' can't be used as a setter because it is final.

2 个答案:

答案 0 :(得分:1)

您可以创建一个函数并传递markerId来替换实际的标记:

   updateMarker(id){
 
  final marker = markers.values.toList().firstWhere((item) => item.markerId == id);

  Marker _marker = Marker(
   markerId: marker.markerId,
   onTap: () {
     print("tapped");
   },
   position: LatLng(marker.position.latitude, marker.position.longitude),
   icon: marker.icon,
   infoWindow: InfoWindow(title: 'my new Title'),
  );

 setState(() {
  //the marker is identified by the markerId and not with the index of the list
   markers[id] = _marker;
 });
}

答案 1 :(得分:0)

您可以在任何想要更改位置的地方轻松使用此代码:

setState((){markers[id]=markers[id].copyWith(positionParam:LatLng(yournewlat,your new long));});

您甚至可以在点击回调标记中使用它。