修复currentmarker显示

This commit is contained in:
mmc
2026-03-09 17:30:26 +08:00
parent 5f5520ada2
commit 919afde01e

View File

@@ -640,11 +640,8 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
Future<void> _handleRefresh() async {
// 防止重复刷新
if (_isRefreshing) return;
// 🔥 保存当前定位(刷新前先记录)
final savedCurrentLatLng = _currentLatLng;
final savedCurrentWgsLatLng = _currentWgsLatLng;
final savedMapCenter = _mapCenter;
// 🔥 修复1:保存当前有效的地图中心和缩放级别(而非定位坐标)
final savedZoom = _mapController.camera?.zoom ?? 17.0;
setState(() {
_isRefreshing = true; // 标记开始刷新
});
@@ -677,16 +674,17 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
_selectedPlotPath = null;
// 重置作业模式
_currentRobotMode = RobotMode.point;
_currentRobotMode = RobotMode.robot;
_currentAreaMode = AreaMode.work;
_currentWorkMode = WorkMode.bow;
// 重置参数
_workDistance = 0.0;
_angle = 0.0;
_currentLatLng = savedCurrentLatLng;
_currentWgsLatLng = savedCurrentWgsLatLng;
_mapCenter = savedMapCenter ?? _currentLatLng ?? const LatLng(39.9042, 116.4074);
// 🔥 修复2:优先恢复地图中心,而非定位坐标
_currentLatLng = null;
_currentWgsLatLng = null;
_mapCenter = _getDefaultValidCenter(); // 仅用兜底坐标初始化地图中心
});
// 3. 重新初始化定位
@@ -694,6 +692,16 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
// 4. 重置轨迹管理器
_traceManager.reset();
if (_isValidLatLng(_mapCenter.latitude, _mapCenter.longitude)) {
_mapController.move(_mapCenter, savedZoom);
} else {
// 使用兜底的有效坐标(确保在高德瓦片覆盖范围内)
final defaultCenter = _getDefaultValidCenter();
_mapController.move(defaultCenter, 17.0);
_currentLatLng = null;
_currentWgsLatLng = null;
_mapCenter = defaultCenter;
}
// 5. 重新加载作业记录(保持数据最新)
// final userId = context.read<AppUserCubit>().state.user?.userId ?? "";
@@ -701,12 +709,7 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
// await context.read<DevicesCubit>().loadWorkRecords(userId);
// }
if (savedCurrentLatLng != null) {
_mapController.move(savedCurrentLatLng, _mapController.camera?.zoom ?? 17);
} else {
_mapController.move(const LatLng(39.9042, 116.4074), 17);
}
_mapController.move(_getDefaultValidCenter(), savedZoom);
// 刷新成功提示
if (mounted) {
ToastUtils.showSuccess(context, '页面已刷新完成');
@@ -1169,19 +1172,32 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
);
}
LatLng _getDefaultValidCenter() {
return const LatLng(30.279651, 120.154871);
}
Widget _buildMap(double lat, double lng, bool obfFlag, int headingStatus, String controlMode) {
if (lat != 0 && lat != 0 && (lat != _currentLatLng?.latitude || lng != _currentLatLng?.longitude)) {
_onDeviceData(lng, lat, obfFlag, headingStatus, controlMode);
}
final gcjPoint = wgs84ToGcj02(lat, lng);
final initCenter = bd09ToGcj02(
'120.81992468426961', // 经度
'32.04532826114155',
);
//final initCenter = bd09ToGcj02(
// '120.81992468426961', // 经度
// '32.04532826114155',
//);
// 🔥 修复1:初始化坐标改为直接使用有效GCJ02坐标,避免BD09转换风险
final initCenter = _getDefaultValidCenter();
_currentWgsLatLng = LatLng(lat, lng);
_currentLatLng = gcjPoint; // ✅ 状态变量在setState内更新
//_currentLatLng = gcjPoint; // ✅ 状态变量在setState内更新
if (_isValidLatLng(gcjPoint.latitude, gcjPoint.longitude)) {
_currentLatLng = gcjPoint;
} else {
_currentLatLng = null;
}
return FlutterMap(
mapController: _mapController,
options: MapOptions(
@@ -1195,17 +1211,22 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
),
children: [
/// 高德瓦片(GCJ-02)
Transform.scale(
scale: 1.5, // 地图背景放大1.5倍(可调整:1.2/1.3/1.5)
alignment: Alignment.center, // 以地图中心为缩放原点,避免偏移
child: TileLayer(
urlTemplate:
'https://webrd02.is.autonavi.com/appmaptile'
'?style=8&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1' // 高清瓦片保证放大后不模糊
'&key=bbb1f0f20eed6bf679eddf2625630aba',
tileProvider: NetworkTileProvider(headers: {'Referer': 'https://www.amap.com'}),
maxZoom: 18,
TileLayer(
urlTemplate:
"https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=2&style=7&key=bbb1f0f20eed6bf679eddf2625630aba",
// urlTemplate:
// 'https://webrd02.is.autonavi.com/appmaptile'
// '?style=8&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1'
// '&key=bbb1f0f20eed6bf679eddf2625630aba',
// 🔥 修复:适配高DPI(替代pixelRatio)
// tileSize: 512, // 高清瓦片尺寸(默认256,改为512适配scale=2)
tileProvider: NetworkTileProvider(
// 自定义瓦片请求头(可选,提升兼容性)
headers: {
'Referer': 'https://www.amap.com', // 高德要求的Referer
},
),
maxZoom: 18,
),
// 绘制path折线(Line模式)