路径规划修复

This commit is contained in:
mmc
2026-04-15 16:38:54 +08:00
parent 803b9bd861
commit 4c11f06513
3 changed files with 114 additions and 148 deletions

View File

@@ -9,6 +9,7 @@ import 'package:flutter/rendering.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:geolocator/geolocator.dart';
import 'package:get_it/get_it.dart';
import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http;
import 'package:latlong2/latlong.dart';
@@ -46,6 +47,7 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'dart:ui' as ui;
import '../path_list_pages.dart';
import 'package:maibu_satabot_v2/core/logging/i_logger_service.dart';
// 定义轨迹点类型(经纬度)
typedef PlotPoint = LatLng;
@@ -92,6 +94,8 @@ class MapPageEnterprise extends StatefulWidget {
}
class _MapPageEnterpriseState extends State<MapPageEnterprise> {
final ILoggerService _logger = GetIt.I<ILoggerService>();
final _dispatcher = sl<NetMessageDispatcher>();
bool _isRefreshing = false; // 新增:页面刷新状态标志
bool _isVideoDialogOpen = false; // 控制视频弹窗显示
@@ -270,6 +274,8 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
// 新增:加载本地存储数据方法
Future<void> _loadSavedData() async {
try {
_traceManager.setMode(TPMode.LOCATION);
final prefs = await SharedPreferences.getInstance();
final workStatusStr = prefs.getString(kSavedWorkStatus);
if (workStatusStr != null) {
@@ -929,9 +935,12 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
// ========== 新增:页面刷新初始化方法 ==========
Future<void> _handleRefresh() async {
if (_workStatus != WorkStatus.idle) {
_showPageToast(message: "请先停止作业再刷新页面哦!", type: ToastType.warn);
return;
_stopWork();
}
//if (_workStatus != WorkStatus.idle) {
// _showPageToast(message: "请先停止作业再刷新页面哦!", type: ToastType.warn);
// return;
//}
_cancelAllToast();
if (_isRefreshing) return;
@@ -1026,7 +1035,6 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
_workStatus = WorkStatus.idle;
isStartWork = false;
isStopWork = false;
_mapCenter = _getDefaultValidCenter();
// 轨迹管理器重置
_traceManager.reset();
@@ -1407,6 +1415,8 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
_traceManager.upsert(_currentWgsLatLng as PlotPoint, TPAction.UPDATE);
tracePoint = _traceManager.getTracePoint();
gctracePoint = batchWgs84ToGcj02(tracePoint!);
_logger.log("[转换后gctracePoint]: $gctracePoint");
_logger.log("[当前轨迹模式]:${_traceManager.getMode()}"); // 这里必须加 ()
//_currentLatLng = gcjPoint; // ✅ 状态变量在setState内更新
if (_isValidLatLng(gcjPoint.latitude, gcjPoint.longitude)) {
@@ -1753,6 +1763,8 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
}
void _stopWork() async {
_logger.log('按下停止按钮');
if (mounted) {
setState(() {
isStartWork = false; // 🔥 关键:停止作业标志
@@ -1761,6 +1773,10 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
_showControlModeWarn = false;
isStopWork = true; //已经点击过停止
isreceiveFirstCompletePoint = false;
_traceManager.setMode(TPMode.LOCATION);
_traceManager.reset();
tracePoint = [];
gctracePoint = [];
});
}
@@ -1769,10 +1785,6 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
_saveDataToLocal(); // 🔥 保存暂停状态
_showPageToast(message: "作业已停止", type: ToastType.error);
_traceManager.setMode(TPMode.LOCATION);
_traceManager.reset();
tracePoint = [];
gctracePoint = [];
}
/// 继续作业
@@ -2336,8 +2348,10 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
if (arriLatitude != null && arriLongitude != null) {
targetLatLng = LatLng(arriLatitude, arriLongitude);
if (__isValidLatLng(targetLatLng)) {
debugPrint("${targetLatLng}收到完成点arriLatitude");
if (!isreceiveFirstCompletePoint) {
//debugPrint("${targetLatLng}收到完成点arriLatitude");
if (!isreceiveFirstCompletePoint && isStartWork && _workStatus == WorkStatus.working) {
debugPrint("收到完成点arriLatitude");
_traceManager.setMode(TPMode.NAVIGATION);
isreceiveFirstCompletePoint = true;
}