diff --git a/assets/miniapp/mhtControl_1.0.0.zip b/assets/miniapp/mhtControl_1.0.0.zip index 99c3bf4..7b2ce61 100644 Binary files a/assets/miniapp/mhtControl_1.0.0.zip and b/assets/miniapp/mhtControl_1.0.0.zip differ diff --git a/lib/pages/main_bottom/component/main_page_b_bottom_change.dart b/lib/pages/main_bottom/component/main_page_b_bottom_change.dart index b238d14..1b1a9de 100644 --- a/lib/pages/main_bottom/component/main_page_b_bottom_change.dart +++ b/lib/pages/main_bottom/component/main_page_b_bottom_change.dart @@ -1,9 +1,12 @@ import 'dart:convert'; +import 'dart:io'; import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:vbvs_app/common/util/CommonVariables.dart'; import 'package:vbvs_app/component/NullDataComponentWidget.dart'; +import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/user_info_controller.dart'; import 'package:vbvs_app/model/WebSocketMessage.dart'; import 'package:vbvs_app/pages/common/bezier_bottom_navigation_bar.dart'; @@ -107,9 +110,21 @@ class _HomePageState extends State return Center(child: Text('页面 ${titles[selectedIndex]}')); } + + DateTime? _lastBackPressedTime; // 记录上一次返回的时间 @override Widget build(BuildContext context) { - return Scaffold( + return PopScope( + canPop: false, + onPopInvokedWithResult: (disposition, result) async { + if (Platform.isAndroid) { + var flag = await _handleBackPressed(context); // 自定义返回逻辑 + if (flag) { + SystemNavigator.pop(); + } + } + }, + child: Scaffold( backgroundColor: const Color(0xFF011C33), body: IndexedStack( index: selectedIndex, @@ -122,7 +137,7 @@ class _HomePageState extends State path: path, titles: titles, ), - ); + )); } void switchTab(int index) { @@ -228,4 +243,19 @@ class _HomePageState extends State ef.log("[激活控制页面报错]:$e"); } } + + Future _handleBackPressed(BuildContext context) async { + final currentTime = DateTime.now(); + + // 如果上次点击返回键时间为空,或者间隔超过 1 秒 + if (_lastBackPressedTime == null || + currentTime.difference(_lastBackPressedTime!) > Duration(seconds: 2)) { + _lastBackPressedTime = currentTime; + // showToast("再按一次退出程序", color: color_warning, closeTime: 2); + TopSlideNotification.show(context, text: "再滑一次退出程序".tr); + return false; // 阻止退出程序 + } else { + return true; // 允许退出程序 + } + } } diff --git a/lib/pages/mh_page/device/component/DeviceComponentWidget.dart b/lib/pages/mh_page/device/component/DeviceComponentWidget.dart index 1e8a02f..10de659 100644 --- a/lib/pages/mh_page/device/component/DeviceComponentWidget.dart +++ b/lib/pages/mh_page/device/component/DeviceComponentWidget.dart @@ -272,6 +272,15 @@ class _DeviceComponentWidgetState extends State { device: widget.bleDevice.scanResult.device); blueteethBindController.currentDevice = bledevice; blueteethBindController.currentDeviceMac.value = ""; + WidgetsBinding.instance.addPostFrameCallback((_) { + if (homeController + .homeSleepDays.value.isNotEmpty) { + homeController.selectedDayIndex.value = + homeController.homeSleepDays.value.length - + 1; + } + }); + await homeController.getPersonList(); } else { blueteethBindController.resumeScanning(); blueteethBindController.currentDeviceMac.value = ""; diff --git a/lib/pages/mh_page/device/controller/mht_bluetooth_controller.dart b/lib/pages/mh_page/device/controller/mht_bluetooth_controller.dart index 02125d2..c8437a4 100644 --- a/lib/pages/mh_page/device/controller/mht_bluetooth_controller.dart +++ b/lib/pages/mh_page/device/controller/mht_bluetooth_controller.dart @@ -10,6 +10,7 @@ import 'package:vbvs_app/common/color/ServiceConstant.dart'; import 'package:vbvs_app/common/color/app_uri_status.dart'; import 'package:vbvs_app/common/util/DailyLogUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; +import 'package:vbvs_app/common/util/requestWithLog.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/model/api_response.dart'; import 'package:vbvs_app/pages/mh_page/device/model/BlueToothDataModel.dart'; @@ -71,8 +72,6 @@ class MHTBlueToothController extends GetControllerEx { RxMap connect_wifi = {}.obs; RxString? cid = "".obs; - - void startStatusPolling() { updateDeviceStatus().then((res) { if (res.code == HttpStatusCodes.ok) { @@ -189,7 +188,7 @@ class MHTBlueToothController extends GetControllerEx { return res; } else { model.deviceDataStatus = []; - return ApiResponse(code:1, msg: "".tr); + return ApiResponse(code: 1, msg: "".tr); } } catch (e) { print("获取设备状态异常: $e"); @@ -257,6 +256,56 @@ class MHTBlueToothController extends GetControllerEx { } return ApiResponse(code: -1, msg: "未知错误".tr); } + + saveHabitData(sleepData) async { + String serviceAddress = ServiceConstant.service_address; + String serviceName = ServiceConstant.server_service; + String serviceApi = ServiceConstant.user_setting; + String type = "sleep_habit_${sleepData['mac']}"; + String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; + var data = { + "type": type, + "mac": sleepData['mac'], + "time": DateTime.now().millisecondsSinceEpoch, + "data": sleepData, + }; + await requestWithLog( + logTitle: "更新睡眠习惯", + method: MyHttpMethod.put, + queryUrl: queryUrl, + data: data, + ); + } + + Future loadHabitDataApi(String mac, {int time = 3}) async { + String serviceAddress = ServiceConstant.service_address; + String serviceName = ServiceConstant.server_service; + String serviceApi = ServiceConstant.user_setting; + String type = "sleep_habit_${mac}"; + String queryUrl = + "${serviceAddress}${serviceName}${serviceApi}?type=${type}"; + + // 使用 Future 来等待异步操作完成 + Map result = {}; + + await requestWithLog( + logTitle: "更新睡眠习惯", + method: MyHttpMethod.get, + queryUrl: queryUrl, + onSuccess: (res) { + ef.log("加载睡眠习惯成功: ${res.data}"); + result = res.data; // 将返回的数据存入 result + }, + onFailure: (res) { + ef.log("加载睡眠习惯失败: ${res.msg}"); + result = {}; // 如果失败,可以返回空的 Map + }, + ); + + return result; // 在 requestWithLog 完成之后返回 result + } + + //todo 解绑的时候删除自己所拥有的所有设备的睡眠习惯 } void safeShowNotification(String msg) { diff --git a/lib/pages/mh_page/device/mht_device_calibration.dart b/lib/pages/mh_page/device/mht_device_calibration.dart index d980568..e938fe8 100644 --- a/lib/pages/mh_page/device/mht_device_calibration.dart +++ b/lib/pages/mh_page/device/mht_device_calibration.dart @@ -873,7 +873,6 @@ class _MHTCalibrationPageState extends State { textColor: themeController.currentColor.sc9, ); } - deviceCalibrationController.statusContext.value = ""; deviceCalibrationController.bed_calibration.value == 0; blueteethBindController.cid?.value = ""; @@ -907,7 +906,7 @@ class _MHTCalibrationPageState extends State { data["side"] = currentCalibrationStep.value == 1 ? "A" : "B"; } } - data['cancel'] = true; + // data['cancel'] = true; requestWithLog( logTitle: "设备校准", method: MyHttpMethod.post, diff --git a/lib/pages/mh_page/homepage/controller/mht_home_controller.dart b/lib/pages/mh_page/homepage/controller/mht_home_controller.dart index ae01ffc..891e5cc 100644 --- a/lib/pages/mh_page/homepage/controller/mht_home_controller.dart +++ b/lib/pages/mh_page/homepage/controller/mht_home_controller.dart @@ -404,6 +404,7 @@ class MHTHomeController extends GetControllerEx { queryUrl: queryUrl, onSuccess: (res) { personnelList.value = res.data ?? []; + updateAll(); }, onFailure: (res) { EasyDartModule.logger.warning("请求人员信息列表失败: ${res.msg}"); diff --git a/lib/pages/mh_page/homepage/mht_sleep_report_page.dart b/lib/pages/mh_page/homepage/mht_sleep_report_page.dart index f020e14..a52f68d 100644 --- a/lib/pages/mh_page/homepage/mht_sleep_report_page.dart +++ b/lib/pages/mh_page/homepage/mht_sleep_report_page.dart @@ -125,8 +125,19 @@ class _MhtSleepReportPageState extends State { if (userInfoController.model.login! != null && userInfoController.model.login! == 1) { final list = deviceController.personnelList.value; - if (list.isNotEmpty && - formFieldController.value == null) { + // if (list.isNotEmpty && + // formFieldController.value == null) { + // WidgetsBinding.instance.addPostFrameCallback((_) { + // formFieldController.value = list[0]["mac"]; + // personInfo.value = list[0]; + // homeController.selectPerson.value = list[0]; + // homeController.selectDevcie.value = list[0]["mac"]; + // deviceController + // .getSleeps(formFieldController.value); + // homeController.updateAll(); + // }); + // } + if (list.isNotEmpty) { WidgetsBinding.instance.addPostFrameCallback((_) { formFieldController.value = list[0]["mac"]; personInfo.value = list[0]; @@ -312,7 +323,8 @@ class _MhtSleepReportPageState extends State { Obx(() { if (homeController.selectDevcie.value != null && - homeController.selectDevcie.value!.isNotEmpty) + homeController.selectDevcie.value!.isNotEmpty && + deviceController.personnelList.value.isNotEmpty) return Expanded( child: NewSleepReportPage( data: { diff --git a/lib/pages/mh_page/new_mine_page.dart b/lib/pages/mh_page/new_mine_page.dart index 4744981..76609c9 100644 --- a/lib/pages/mh_page/new_mine_page.dart +++ b/lib/pages/mh_page/new_mine_page.dart @@ -1,5 +1,3 @@ -import 'dart:ffi'; - import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; diff --git a/lib/pages/mh_page/people_info.dart b/lib/pages/mh_page/people_info.dart index aa99a8e..e53f80e 100644 --- a/lib/pages/mh_page/people_info.dart +++ b/lib/pages/mh_page/people_info.dart @@ -131,7 +131,8 @@ class PeopleInfoPage extends GetView { await controller.savePeoples(data, context); MHTHomeController mhtHomeController = Get.find(); - mhtHomeController.getPersonList(); + await Future.delayed(Duration(seconds: 1)); + await mhtHomeController.getPersonList(); WebviewTestController webviewTestController = Get.find(); webviewTestController diff --git a/lib/pages/mh_page/smys.dart b/lib/pages/mh_page/smys.dart index 7369952..4d7b42b 100644 --- a/lib/pages/mh_page/smys.dart +++ b/lib/pages/mh_page/smys.dart @@ -177,7 +177,8 @@ class Smys extends GetView { decoration: BoxDecoration( border: Border( bottom: BorderSide( - color: const Color(0xFF929699), + color: Color(0xFF929699), + // color: Colors.red, width: 0.rpx), ), ), diff --git a/lib/pages/mh_page/test/WebviewTestModel.dart b/lib/pages/mh_page/test/WebviewTestModel.dart index eae4723..3764d82 100644 --- a/lib/pages/mh_page/test/WebviewTestModel.dart +++ b/lib/pages/mh_page/test/WebviewTestModel.dart @@ -14,6 +14,7 @@ import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/requestWithLog.dart'; import 'package:vbvs_app/controller/user_info_controller.dart'; import 'package:vbvs_app/model/WebSocketMessage.dart'; +import 'package:vbvs_app/pages/mh_page/device/controller/mht_bluetooth_controller.dart'; import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart'; class WebviewTestModel { @@ -138,6 +139,27 @@ class WebviewTestController extends GetControllerEx { Get.toNamed("/mHTDeviceTypePage"); return true; }); + bridge.sdk.saveSleepHabit((args) async { + ef.log('更新睡眠习惯: $args[0]'); + try { + MHTBlueToothController blueToothController = Get.find(); + blueToothController.saveHabitData(args[0]); + } catch (e) { + ef.log("[更新睡眠习惯失败]:$e"); + } + return true; + }); + bridge.sdk.loadSleepHabit((args) async { + ef.log('查询睡眠习惯: $args[0]'); + try { + MHTBlueToothController blueToothController = Get.find(); + var sleepData = await blueToothController.loadHabitDataApi(args[0]); + return sleepData['data']; + } catch (e) { + ef.log("[查询睡眠习惯失败]:$e"); + } + return true; + }); }); } catch (e, s) { ef.log('$e,$s'); diff --git a/lib/pages/mh_page/user/controller/update_password_controller.dart b/lib/pages/mh_page/user/controller/update_password_controller.dart index 16d878b..b4fe6df 100644 --- a/lib/pages/mh_page/user/controller/update_password_controller.dart +++ b/lib/pages/mh_page/user/controller/update_password_controller.dart @@ -109,7 +109,7 @@ class UpdatePasswordController extends GetControllerEx { }; await requestWithLog( logTitle: "修改密码", - method: MyHttpMethod.post, + method: MyHttpMethod.put, queryUrl: queryUrl, data: data, onSuccess: (res) {