google-maps - Google Maps for Flutter - 拖动后获取标记的新位置
问题描述
我想使用 google Google Maps for 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),
),
);
},
);
}
但是我在拖动标记后找不到获取标记新位置的方法。我试图通过引用的markers
属性来获取标记的新位置,MapController
但它返回了标记的初始位置。
_mapController.markers.forEach((marker) {
print("Pos: " + marker.options.position.toString())
});
// Prints "Pos: LatLng[7.2906, 80.63369999999998]"
我在这里做错了什么还是有另一种方法来完成这个用例?谢谢你。
解决方案
我解决这个问题的方法是使用相机位置来移动标记,然后使用当前相机位置来获取新坐标。您需要对代码进行一些重构,以使用 google maps 0.4 版中的最新更改进行颤振,其中包括您需要添加到代码中的回调:
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));
});
}
告诉我它是否有效!
推荐阅读
- javascript - 如何根据下拉选择提交显示的div
- autohotkey - 在 AutoHotKey 中使用 Right Alt 和 Right Ctrl 复制和粘贴
- python - 有什么方法可以远程运行 Tensorflow 模型?
- java - 异常错误输出,但已处理
- vue.js - 单元测试 Vue 组件时无法模拟 $root.$refs
- python - 替换与键匹配的单词在 Python 中不起作用
- neo4j - Neo4j Count Distinct Nodes 返回的节点多于总数
- r - 在ggplot2中将文本添加到多个柱形图(分面)
- reactjs - 如何更新数组中特定索引的状态
- vb.net - Select several levels of childs