我正在尝试更新标记的坐标(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.
答案 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));});
您甚至可以在点击回调标记中使用它。