Google Maps for Flutter - 拖动后获取标记的新位置
Google Maps for Flutter - Get new position of marker after dragging
我想使用 google Google Maps for Flutter 和它的标记在 flutter 中创建一个位置选择器。可以通过将可拖动选项设置为 true 创建标记来创建可拖动标记。使用以下代码段。
Widget _buildMap(BuildContext context) {
return GoogleMap(
options: GoogleMapOptions(
cameraPosition: CameraPosition(
target: LatLng(7.2906, 80.6337),
zoom: 7.0,
),
compassEnabled: true,
),
onMapCreated: (controller) {
_mapController = controller;
controller.addMarker(
MarkerOptions(
draggable: true,
flat: false,
position: LatLng(7.2906, 80.6337),
),
);
},
);
}
但是我找不到在拖动标记后获取标记新位置的方法。我试图通过参考 MapController
的 markers
属性来获取标记的新位置,但它 returns 标记的初始位置。
_mapController.markers.forEach((marker) {
print("Pos: " + marker.options.position.toString())
});
// Prints "Pos: LatLng[7.2906, 80.63369999999998]"
我在这里做错了什么,或者有其他方法可以完成这个用例吗?谢谢。
该软件包是开发人员预览版 0.0.3。在它达到 1.0 之前,不要考虑将其用于生产工作。同时,你可以提交一个问题来通知 flutter 团队你的具体优先级。
我通过添加侦听器和一些条件来管理这个
mapController.addListener(() async {
final cameraCoordinates = mapController.cameraPosition.target;
if (!mapController.isCameraMoving &&
widget.selectedPlace.options.position !=
mapController.cameraPosition.target) {
mapController.updateMarker(
widget.selectedPlace, MarkerOptions(position: cameraCoordinates));
}
});
这里的mapController是GoogleMapController实例。
我解决这个问题的方法是使用相机位置移动标记,然后使用当前相机位置获取新坐标。您需要稍微重构您的代码,以使用 0.4 版本的 google maps for flutter 中的最新更改,其中包括您需要添加到代码中的回调:
onCameraMove: ((_position) => _updateMarker(_position)),
然后您可以在每次用户移动相机时设置标记的新状态,并将此坐标用于您需要的任何其他目的:
void _updatePosition(CameraPosition _position) {
Position newMarkerPosition = Position(
latitude: _position.target.latitude,
longitude: _position.target.longitude);
Marker marker = markers["your_marker"];
setState(() {
markers["your_marker"] = marker.copyWith(
positionParam: LatLng(newMarkerPosition.latitude, newMarkerPosition.longitude));
});
}
告诉我它是否有效!
我想使用 google Google Maps for Flutter 和它的标记在 flutter 中创建一个位置选择器。可以通过将可拖动选项设置为 true 创建标记来创建可拖动标记。使用以下代码段。
Widget _buildMap(BuildContext context) {
return GoogleMap(
options: GoogleMapOptions(
cameraPosition: CameraPosition(
target: LatLng(7.2906, 80.6337),
zoom: 7.0,
),
compassEnabled: true,
),
onMapCreated: (controller) {
_mapController = controller;
controller.addMarker(
MarkerOptions(
draggable: true,
flat: false,
position: LatLng(7.2906, 80.6337),
),
);
},
);
}
但是我找不到在拖动标记后获取标记新位置的方法。我试图通过参考 MapController
的 markers
属性来获取标记的新位置,但它 returns 标记的初始位置。
_mapController.markers.forEach((marker) {
print("Pos: " + marker.options.position.toString())
});
// Prints "Pos: LatLng[7.2906, 80.63369999999998]"
我在这里做错了什么,或者有其他方法可以完成这个用例吗?谢谢。
该软件包是开发人员预览版 0.0.3。在它达到 1.0 之前,不要考虑将其用于生产工作。同时,你可以提交一个问题来通知 flutter 团队你的具体优先级。
我通过添加侦听器和一些条件来管理这个
mapController.addListener(() async {
final cameraCoordinates = mapController.cameraPosition.target;
if (!mapController.isCameraMoving &&
widget.selectedPlace.options.position !=
mapController.cameraPosition.target) {
mapController.updateMarker(
widget.selectedPlace, MarkerOptions(position: cameraCoordinates));
}
});
这里的mapController是GoogleMapController实例。
我解决这个问题的方法是使用相机位置移动标记,然后使用当前相机位置获取新坐标。您需要稍微重构您的代码,以使用 0.4 版本的 google maps for flutter 中的最新更改,其中包括您需要添加到代码中的回调:
onCameraMove: ((_position) => _updateMarker(_position)),
然后您可以在每次用户移动相机时设置标记的新状态,并将此坐标用于您需要的任何其他目的:
void _updatePosition(CameraPosition _position) {
Position newMarkerPosition = Position(
latitude: _position.target.latitude,
longitude: _position.target.longitude);
Marker marker = markers["your_marker"];
setState(() {
markers["your_marker"] = marker.copyWith(
positionParam: LatLng(newMarkerPosition.latitude, newMarkerPosition.longitude));
});
}
告诉我它是否有效!