import 'dart:developer'; import 'package:cpnav/pages/setting/setting_controller.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:cpnav/service/base.dart'; import 'package:intl/intl.dart'; import 'package:scence_map/controllers/controller.dart'; import 'package:scence_map/record_entity.dart'; import '../../main.dart'; import '../setting/project/model.dart'; SettingController settingController = Get.find(); class PassTrackController extends GetxController { final mapController = Get.put(ScenceMapController()); Rx selectedPilePoint = Rx(null); var updateCount = 0.obs; var date = "2023-11-1".obs; RecordEntity? currentPoint; var isDeviceShow = false.obs; PassTrackController(); @override void onInit() async { super.onInit(); loadSideLine(); loadData(); ever(date, (val) { loadData(); }); } loadData() { // loadBindDevice(); loadRcordList(); } loadBindDevice() async { ProjectModel? project = settingController.currentProject.value; project ??= settingController.getproject(); if (project == null) { return; } String projType = settingController.projType; var binddevices = await services.getDeviceBind(projType, project.projCode); for (var device in binddevices) { var dev = DeviceItem.fromJson(device); mapController.deviceList[dev.tid] = dev; } } loadSideLine() async { mapController.sideLinListeMap.clear(); ProjectModel? project = settingController.currentProject.value; project ??= settingController.getproject(); if (project == null) { return; } String projType = settingController.projType; var data = await services.getSideLine(project.projCode, projType); if (data == null) { return; } double maxX = -double.infinity; double maxY = -double.infinity; double minX = double.infinity; double minY = double.infinity; var sideLineData = data as Map; // var sideLineData = data; sideLineData.forEach((group, items) { for (var item in items) { SideLineItem sideLineItem = SideLineItem.fromJson(item); var sideLineList = mapController.sideLinListeMap[group]; if (sideLineList == null) { sideLineList = []; mapController.sideLinListeMap[group] = sideLineList; } sideLineList.add(sideLineItem); if (sideLineItem.x > maxX) { maxX = sideLineItem.x; } if (sideLineItem.y > maxY) { maxY = sideLineItem.y; } if (sideLineItem.x < minX) { minX = sideLineItem.x; } if (sideLineItem.y < minY) { minY = sideLineItem.y; } } }); if (maxX != -double.infinity && maxY != -double.infinity && minX != double.infinity && minY != double.infinity) { mapController.centerXY = Offset((maxX + minX) / 2, (maxY + minY) / 2); } mapController.updateCount++; } loadRcordList() async { mapController.recordList.length = 0; ProjectModel? project = settingController.currentProject.value; project ??= settingController.getproject(); if (project == null) { return; } String projType = settingController.projType; List record = await services.getRcordList( project.orgCode, project.projCode, projType, date.value); if (record.isNotEmpty) { for (var i = 0; i < record.length; i++) { RecordEntity item = RecordEntity.fromJson(record[i]); if (currentPoint != null && (currentPoint!.tpId == item.tpId)) { item.selected = true; } mapController.recordList.add(item); } if (currentPoint == null) { mapController.centerXY = Offset( mapController.recordList[mapController.recordList.length - 1].x, mapController.recordList[mapController.recordList.length - 1].y); } else { mapController.centerXY = Offset(currentPoint!.x, currentPoint!.y); } //将地图或画布的中心定位到最新记录的位置上 } else { String now = DateFormat('yyyy-MM-dd').format(DateTime.now()); if ((currentPoint == null && date.value == now) || (DateFormat('yyyy-MM-dd').format(currentPoint!.startTime) == now)) { // scaffoldMessengerKey.currentState?.showSnackBar( // SnackBar( // content: Text('提示: ${date.value}暂无施工数据'), // duration: const Duration(seconds: 5), // backgroundColor: const Color.fromARGB(255, 230, 162, 60), // ), // ); } } mapController.updateCount++; } }