优化刷新逻辑和 开始作业面板的缓存逻辑
This commit is contained in:
@@ -171,8 +171,7 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
super.initState();
|
||||
_currentStation = _stationList.first;
|
||||
_traceManager = TracePoint<PlotPoint>();
|
||||
_initLocationEnterprise();
|
||||
// 新增:加载本地存储的绘制数据
|
||||
|
||||
_loadSavedData();
|
||||
|
||||
// 示例:切换到导航模式
|
||||
@@ -294,11 +293,11 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
|
||||
// 1. 恢复作业面板状态
|
||||
_isWorkPanelOpen = prefs.getBool(kSavedIsWorkPanelOpen) ?? false;
|
||||
if (isStartWork && !isStopWork) {
|
||||
_isWorkPanelOpen = true;
|
||||
} else {
|
||||
_isWorkPanelOpen = false;
|
||||
}
|
||||
// if (isStartWork && !isStopWork) {
|
||||
// _isWorkPanelOpen = true;
|
||||
// } else {
|
||||
// _isWorkPanelOpen = false;
|
||||
// }
|
||||
|
||||
// 2. 恢复作业模式
|
||||
workMode = prefs.getString(kSavedWorkMode) ?? "弓字模式";
|
||||
@@ -444,42 +443,74 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
return lat != 0 && lng != 0 && lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180;
|
||||
}
|
||||
|
||||
void _onDeviceData(double lng, double lat, bool obfFlag, int headingStatus, controlMode) {
|
||||
void _onDeviceData(double lng, double lat, bool obfFlag, int headingStatus, dynamic controlMode) {
|
||||
try {
|
||||
// 1. 校验坐标有效性
|
||||
if (!_isValidLatLng(lat, lng)) {
|
||||
debugPrint('坐标无效:纬度=$lat, 经度=$lng,跳过处理');
|
||||
return;
|
||||
// 1. 校验坐标是否有效
|
||||
bool isValid = _isValidLatLng(lat, lng);
|
||||
|
||||
// ==============================================
|
||||
// 🔥 关键:无效坐标只打印,不 return,不断流
|
||||
// ==============================================
|
||||
if (!isValid) {
|
||||
debugPrint('[定位] 坐标无效:lat=$lat, lng=$lng → 跳过本次定位更新');
|
||||
// 不写 return!!!
|
||||
}
|
||||
|
||||
if (isStartWork && headingStatus == 0 && !isStopWork) {
|
||||
if (!_showHeadingWarn) {
|
||||
// 仅状态变化时更新,避免重复刷新
|
||||
setState(() => _showHeadingWarn = true);
|
||||
// ==============================================
|
||||
// 2. 航向角提示(不受坐标影响,必须执行)
|
||||
// ==============================================
|
||||
if (isStartWork && !isStopWork) {
|
||||
if (headingStatus == 0) {
|
||||
if (!_showHeadingWarn) {
|
||||
setState(() {
|
||||
_showHeadingWarn = true;
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (_showHeadingWarn) {
|
||||
setState(() {
|
||||
_showHeadingWarn = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
return;
|
||||
} else if (isStartWork && headingStatus == 1 && _showHeadingWarn && !isStopWork) {
|
||||
// 条件不满足时隐藏提示
|
||||
setState(() => _showHeadingWarn = false);
|
||||
}
|
||||
|
||||
if (isStartWork && controlMode != "3" && !isStopWork) {
|
||||
if (!_showControlModeWarn) {
|
||||
// 仅状态变化时更新
|
||||
setState(() => _showControlModeWarn = true);
|
||||
// ==============================================
|
||||
// 3. 远程模式提示(不受坐标影响,必须执行)
|
||||
// ==============================================
|
||||
String mode = controlMode?.toString() ?? "";
|
||||
if (mode != "3") {
|
||||
if (!_showControlModeWarn) {
|
||||
setState(() {
|
||||
_showControlModeWarn = true;
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (_showControlModeWarn) {
|
||||
setState(() {
|
||||
_showControlModeWarn = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 未作业 → 自动隐藏所有警告
|
||||
if (_showHeadingWarn || _showControlModeWarn) {
|
||||
setState(() {
|
||||
_showHeadingWarn = false;
|
||||
_showControlModeWarn = false;
|
||||
});
|
||||
}
|
||||
} else if (isStartWork && controlMode == "3" && _showControlModeWarn && !isStopWork) {
|
||||
// 条件不满足时隐藏提示
|
||||
setState(() => _showControlModeWarn = false);
|
||||
}
|
||||
|
||||
//if (isStartWork && obfFlag) {
|
||||
// ObsToastWidget.show(context: context, message: "小迈提醒您前方有障碍物哦!");
|
||||
//} else {
|
||||
// ObsToastWidget.dismiss();
|
||||
//}
|
||||
// ==============================================
|
||||
// 4. 障碍物提示(可选,你自己开关)
|
||||
// ==============================================
|
||||
// if (isStartWork && obfFlag) {
|
||||
// ObsToastWidget.show(context: context, message: "小迈提醒您前方有障碍物哦!");
|
||||
// } else {
|
||||
// ObsToastWidget.dismiss();
|
||||
// }
|
||||
} catch (e) {
|
||||
debugPrint('处理经纬度数据失败:$e');
|
||||
debugPrint('[定位] 处理设备数据异常:$e');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -806,6 +837,7 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
|
||||
// ========== 新增:页面刷新初始化方法 ==========
|
||||
Future<void> _handleRefresh() async {
|
||||
debugPrint("点击刷新");
|
||||
// 防止重复刷新
|
||||
if (_isRefreshing) return;
|
||||
// 🔥 修复1:保存当前有效的地图中心和缩放级别(而非定位坐标)
|
||||
@@ -813,13 +845,14 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
setState(() {
|
||||
_isRefreshing = true; // 标记开始刷新
|
||||
});
|
||||
debugPrint("点击刷新111");
|
||||
|
||||
try {
|
||||
if (_currentLatLng != null && _isValidLatLng(_currentLatLng!.latitude, _currentLatLng!.longitude)) {
|
||||
_mapController.move(_currentLatLng!, 18);
|
||||
} else {
|
||||
_mapController.move(_currentLatLng!, 18);
|
||||
debugPrint("点击刷新333");
|
||||
}
|
||||
debugPrint("点击刷新2222");
|
||||
// 2. 重置所有页面状态(恢复初始值)
|
||||
setState(() {
|
||||
_traceManager.setMode(TPMode.LOCATION);
|
||||
@@ -928,8 +961,7 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
} else {
|
||||
_obstacleHoles.add(List.from(_currentObstaclePoints));
|
||||
}
|
||||
_currentObstaclePoints.clear(); // 清空当前绘制的障碍物点
|
||||
_robotModeObsWgsPoints.clear(); // 清空Robot模式下的障碍物WGS84坐标
|
||||
|
||||
_isObstacleEditing = false; // 退出编辑状态
|
||||
});
|
||||
_saveDataToLocal();
|
||||
@@ -939,6 +971,7 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
|
||||
// ========== 核心方法:打点逻辑 ==========
|
||||
void _addMarkedPoint() {
|
||||
_traceManager.reset();
|
||||
if (_currentAreaMode == AreaMode.work && _isWorkAreaCompleted) {
|
||||
ToastUtils.showError(context, '作业区域已完成,无法继续添加打点!');
|
||||
return;
|
||||
@@ -1155,6 +1188,8 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
_isWorkPanelOpen = true;
|
||||
_isPanelOpen = false;
|
||||
});
|
||||
} finally {
|
||||
_saveDataToLocal();
|
||||
}
|
||||
},
|
||||
child: Container(
|
||||
@@ -2098,6 +2133,8 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
setState(() {
|
||||
_isWorkAreaCompleted = true;
|
||||
_saveBoxOpen = true;
|
||||
_currentObstaclePoints.clear(); // 清空当前绘制的障碍物点
|
||||
_robotModeObsWgsPoints.clear(); // 清空Robot模式下的障碍物WGS84坐标
|
||||
final pathList = cubitState.generatedPath as List;
|
||||
typedPathList = pathList.whereType<work_area_model.DeviceAddPathPointModel>().toList();
|
||||
gcjPathPoints = typedPathList.map((point) {
|
||||
@@ -2301,7 +2338,6 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
onPressed: _moveToCurrentLocation,
|
||||
child: VerticalFloatMenu(
|
||||
onEditTap: (bool isOpen) {
|
||||
_traceManager.reset();
|
||||
setState(() {
|
||||
_isPanelOpen = isOpen;
|
||||
});
|
||||
@@ -2316,6 +2352,7 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
_isListBoxOpen = isOpen;
|
||||
_isWorkPanelOpen = false;
|
||||
});
|
||||
_saveDataToLocal();
|
||||
},
|
||||
onDjShow: (bool isOpen) {
|
||||
if (isOpen) context.go(RoutePaths.djMap);
|
||||
|
||||
Reference in New Issue
Block a user