diff --git a/assets/img/icon/xiaoyi.svg b/assets/img/icon/xiaoyi.svg index 4946e11..6a5c24b 100644 --- a/assets/img/icon/xiaoyi.svg +++ b/assets/img/icon/xiaoyi.svg @@ -1 +1,5 @@ +<<<<<<< HEAD +======= + +>>>>>>> 58b2bebe936bdd7239529662ef20b531f2143de4 diff --git a/assets/mhlangs/zh_CN.json b/assets/mhlangs/zh_CN.json index e809a21..db843b2 100644 --- a/assets/mhlangs/zh_CN.json +++ b/assets/mhlangs/zh_CN.json @@ -205,6 +205,8 @@ "请选择身高": "请输入身高", "人员资料": "人员资料", "请输入姓名": "请输入姓名", - "解除分享":"解除分享" - + "解除分享": "解除分享", + "最高分": "最高分", + "最低分": "最低分", + "本周平均分":"本周平均分" } \ No newline at end of file diff --git a/lib/common/color/appConstants.dart b/lib/common/color/appConstants.dart index 7ab9256..ed0d07d 100644 --- a/lib/common/color/appConstants.dart +++ b/lib/common/color/appConstants.dart @@ -4,7 +4,7 @@ import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/enum/APPPackageType.dart'; -class AppConstants { +class AppConstants { // App-related constants static const int code_time = 60; //验证码倒计时 static const int limit = 10; //分页数量 @@ -48,5 +48,5 @@ class AppConstants { //系统参数 //运行打包APP模式 - int ent_type = APPPackageType.TH.code;//1.默认太和 2.欢睡 3.眠花糖 + int ent_type = APPPackageType.MHT.code; //1.默认太和 2.欢睡 3.眠花糖 } diff --git a/lib/controller/weather/weather_controller.dart b/lib/controller/weather/weather_controller.dart index d3109ab..53ea313 100644 --- a/lib/controller/weather/weather_controller.dart +++ b/lib/controller/weather/weather_controller.dart @@ -81,6 +81,10 @@ class WeatherModelController extends GetControllerEx { List placemarks = []; // placemarks = await placemarkFromCoordinates(position.latitude, position.longitude, // localeIdentifier: language); + placemarks = await placemarkFromCoordinates( + position.latitude, + position.longitude, + ); if (placemarks.isNotEmpty) { model.cityName = placemarks[0].locality ?? "未知数据".tr; diff --git a/lib/pages/common/selectDialog.dart b/lib/pages/common/selectDialog.dart index 3284ddf..eedb6d1 100644 --- a/lib/pages/common/selectDialog.dart +++ b/lib/pages/common/selectDialog.dart @@ -195,9 +195,9 @@ Future showDateSelectionDialog(BuildContext context, width: 100.rpx, height: 60.rpx, alignment: Alignment.center, - child: Text("确认", + child: Text("确定", style: TextStyle( - fontSize: 30.rpx, color: Colors.white)), + fontSize: 30.rpx, color: stringToColor("#84F5FF"))), ), ), ], @@ -348,10 +348,10 @@ Future showWeightPickerDialog( width: 100.rpx, height: 60.rpx, child: Text( - "确认", + "确定", style: TextStyle( fontSize: 30.rpx, - color: Colors.white, + color: stringToColor("#84F5FF"), ), ), )), @@ -475,10 +475,10 @@ Future showHeightPickerDialog( width: 100.rpx, height: 60.rpx, child: Text( - "确认", + "确定", style: TextStyle( fontSize: 30.rpx, - color: Colors.white, + color: stringToColor("#84F5FF"), ), ), )), @@ -701,7 +701,7 @@ Future showDayTimeSelectionDialog( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ - // 顶部栏:取消 - 标题 - 确认 + // 顶部栏:取消 - 标题 - 确定 Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -742,9 +742,9 @@ Future showDayTimeSelectionDialog( width: 100.rpx, height: 60.rpx, alignment: Alignment.center, - child: Text("确认".tr, + child: Text("确定".tr, style: TextStyle( - fontSize: 30.rpx, color: Colors.white)), + fontSize: 30.rpx, color: stringToColor("#84F5FF"))), ), ), ], @@ -879,9 +879,9 @@ Future showOneSelectionDialog( alignment: Alignment.center, width: 100.rpx, height: 60.rpx, - child: Text("确认".tr, + child: Text("确定".tr, style: TextStyle( - fontSize: 30.rpx, color: Colors.white)), + fontSize: 30.rpx, color: stringToColor("#84F5FF"))), ), ), ], 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 12d1f4e..5bb2339 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 @@ -138,7 +138,7 @@ class _HomePageState extends State Future dealWebSource(int index) async { WebviewTestController webviewTestController = Get.find(); if (index == 2) { - await webviewTestController.web.jsbridge?.dart.pageActive(); + await webviewTestController.web.jsbridge?.dart.pageActive(true); } else { await webviewTestController.web.jsbridge?.dart.pageInActive(); } diff --git a/lib/pages/mh_page/LanguagePage.dart b/lib/pages/mh_page/LanguagePage.dart index 3040719..bb458a4 100644 --- a/lib/pages/mh_page/LanguagePage.dart +++ b/lib/pages/mh_page/LanguagePage.dart @@ -65,7 +65,7 @@ class LanguagePage extends GetView { ), // 左侧图标 Positioned( - left: 20.rpx, + left: 0.rpx, child: returnIconButtomNew, ), ], diff --git a/lib/pages/mh_page/bluetooth.dart b/lib/pages/mh_page/bluetooth.dart index e22fd13..dd11fca 100644 --- a/lib/pages/mh_page/bluetooth.dart +++ b/lib/pages/mh_page/bluetooth.dart @@ -9,6 +9,7 @@ import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/mh_controller/device_list_controller.dart'; import 'package:vbvs_app/model/api_response.dart'; import 'package:vbvs_app/pages/device_bind/componnet/bind_dialog.dart'; +import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart'; import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart'; class BluetoothPage extends StatefulWidget { @@ -166,8 +167,11 @@ class _BluetoothPageState extends State { context, '详情', "/devicePeopleInfo", arguments: obsData), _buildMenuButton( - context, '人员资料', "/peopleInfoPage", - arguments: obsData,), + context, + '人员资料', + "/peopleInfoPage", + arguments: obsData, + ), _buildMenuButton( context, '房间选择', "/roomPickerPage", arguments: obsData), @@ -194,6 +198,10 @@ class _BluetoothPageState extends State { .unbindDevice(obsData); await deviceListController .getDeviceList(); + MHTHomeController homeController = + Get.find(); + homeController.selectDevcie.value = + ""; try { WebviewTestController webviewTestController = diff --git a/lib/pages/mh_page/device/component/DeviceComponentWidget.dart b/lib/pages/mh_page/device/component/DeviceComponentWidget.dart index 869f095..d32ce2f 100644 --- a/lib/pages/mh_page/device/component/DeviceComponentWidget.dart +++ b/lib/pages/mh_page/device/component/DeviceComponentWidget.dart @@ -25,10 +25,12 @@ import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart'; class DeviceComponentWidget extends StatefulWidget { BlueToothDataModel bleDevice; + var deviceType; DeviceComponentWidget({ super.key, required this.bleDevice, + required this.deviceType, }); @override @@ -212,8 +214,8 @@ class _DeviceComponentWidgetState extends State { blueteethBindController.currentDeviceMac.value = widget.bleDevice.mac; blueteethBindController.updateAll(); - String mac = - await getBindTHMAC(context, widget.bleDevice); + String mac = await getBindTHMAC( + context, widget.bleDevice, widget.deviceType); if (mac != null && mac.isNotEmpty) { bool flag = await fillTHMac(mac, widget.bleDevice, context); @@ -481,19 +483,17 @@ class _DeviceComponentWidgetState extends State { ); } - //获取传感器mac + //获取智能床/床垫mac Future getBindTHMAC( - BuildContext context, BlueToothDataModel device) async { + BuildContext context, BlueToothDataModel device, Map deviceType) async { const int maxRetries = 2; const Duration timeout = Duration(seconds: 5); String? macAddress; - try { // 连接设备 THapp bledevice = THapp(device: device.scanResult.device); - await bledevice.connect(); + await bledevice.connect(); var res2 = bledevice.isConnected; - if (!res2) { edm.EasyDartModule.logger.error("蓝牙连接失败"); DailyLogUtils.printLog("蓝牙连接失败"); @@ -504,58 +504,18 @@ class _DeviceComponentWidgetState extends State { ); throw Exception("蓝牙连接失败"); } - blueteethBindController.blueConnectFlag.value = 2; blueteethBindController.currentDevice = bledevice; await Future.delayed(Duration(seconds: 2)); - var read = bledevice.getresource('fff0/fff1'); - await read!.characteristic.setNotifyValue(true); - var write = bledevice.getresource('fff0/fff2'); - for (int attempt = 0; attempt < maxRetries; attempt++) { - var completer = Completer(); - - StreamSubscription? subscription; - subscription = read.characteristic.onValueReceived.listen((onData) { - if (onData.length >= 14) { - // 按照你提供的协议,返回数据长度至少 17字节,这里保险起见 14起步 - String parsedMac = parseMacFromBleResponse(onData); - completer.complete(parsedMac); - } - }); - - // 发送查询命令 - var order = [ - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x03, - 0x40, - 0x01, - 0x01, - 0x00, - 0x45, - 0xFD - ]; - await write!.characteristic.write(order); - - try { - macAddress = await completer.future.timeout(timeout); - await subscription.cancel(); - break; // 成功拿到,跳出重试 - } catch (e) { - await subscription.cancel(); - if (attempt == maxRetries - 1) { - TopSlideNotification.show( - context, - text: "获取MAC地址超时,请重试".tr, - textColor: themeController.currentColor.sc9, - ); - throw Exception("获取MAC地址失败"); - } - } + if (deviceType['type'] == 3) { + //智能床垫 + macAddress = await getMacFromType3(bledevice, timeout); + } else if (deviceType['type'] == 2) { + //智能床 + macAddress = await getMacFromType2(bledevice, timeout); + } else { + throw Exception("不支持的设备类型"); } if (macAddress == null) { @@ -629,6 +589,87 @@ class _DeviceComponentWidgetState extends State { ); return flag; } + + Future getMacFromType3(THapp bledevice, Duration timeout) async { + final read = bledevice.getresource('fff0/fff1'); + await read!.characteristic.setNotifyValue(true); + final write = bledevice.getresource('fff0/fff2'); + + const int maxRetries = 2; + for (int attempt = 0; attempt < maxRetries; attempt++) { + final completer = Completer(); + final subscription = read.characteristic.onValueReceived.listen((data) { + if (data.length >= 14) { + completer.complete(parseMacFromBleResponse(data)); + } + }); + + final order = [ + 0xFF, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x03, + 0x40, + 0x01, + 0x01, + 0x00, + 0x45, + 0xFD + ]; + await write!.characteristic.write(order); + + try { + final mac = await completer.future.timeout(timeout); + await subscription.cancel(); + return mac; + } catch (_) { + await subscription.cancel(); + if (attempt == maxRetries - 1) rethrow; + } + } + throw Exception("获取MAC超时"); + } + + Future getMacFromType2(THapp bledevice, Duration timeout) async { + try { + final read = bledevice.getresource('ffe0/ffe1'); + await read!.characteristic.setNotifyValue(true); + + final write = + bledevice.getresource('ffe0/ffe1'); // 与 read 同 characteristic + const int maxRetries = 2; + for (int attempt = 0; attempt < maxRetries; attempt++) { + final completer = Completer(); + final subscription = read.characteristic.onValueReceived.listen((data) { + if (data.length >= 17) { + completer.complete(parseMacFromTH2Response(data)); + } + }); + + final order = [0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x0C, 0x0B, 0x0A]; + int checksum = order.reduce((a, b) => a + b) & 0xFFFF; + order.add(checksum & 0xFF); // 低位 + order.add((checksum >> 8) & 0xFF); // 高位 + + await write!.characteristic.write(order); + + try { + final mac = await completer.future.timeout(timeout); + await subscription.cancel(); + return mac; + } catch (_) { + await subscription.cancel(); + if (attempt == maxRetries - 1) rethrow; + } + } + } catch (e) { + ef.log("[获取设备 MAC]:失败:$e"); + } + + throw Exception("获取MAC超时"); + } } String parseMacFromBleResponse(List data) { @@ -650,3 +691,21 @@ String parseMacFromBleResponse(List data) { throw Exception("BLE返回数据格式不正确"); } } + +String parseMacFromTH2Response(List data) { + if (data.length < 17) { + throw Exception("数据长度不足,无法解析MAC"); + } + + int status = data[8]; + if (status != 0x03 && status != 0x04) { + throw Exception("未连接心率带"); + } + + // 提取9~14字节的MAC地址 + List macBytes = data.sublist(9, 15); + return macBytes + .map((b) => b.toRadixString(16).padLeft(2, '0')) + .join(":") + .toUpperCase(); +} diff --git a/lib/pages/mh_page/device/device.dart b/lib/pages/mh_page/device/device.dart index 7933cca..99cd31e 100644 --- a/lib/pages/mh_page/device/device.dart +++ b/lib/pages/mh_page/device/device.dart @@ -4,11 +4,14 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; import 'package:vbvs_app/common/color/appFontsize.dart'; +import 'package:vbvs_app/common/util/DailyLogUtils.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/main_bottom/global_controller.dart'; import 'package:vbvs_app/controller/mh_controller/device_list_controller.dart'; +import 'package:vbvs_app/pages/main_bottom/component/main_page_b_bottom_change.dart'; +import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart'; class DeviceInfoWidget extends GetView { int index; @@ -200,8 +203,26 @@ class DeviceInfoWidget extends GetView { width: 150.rpx, height: 90.rpx, child: FFButtonWidget( - onPressed: () { - // deviceControllerChange(device); + onPressed: () async { + try { + WebviewTestController webviewTestController = + Get.find(); + var future = webviewTestController + .web.jsbridge?.dart + .appToHtmlDevice(device); + Future.delayed(Duration(seconds: 5), () { + return; + }); + await future; + await webviewTestController.web.jsbridge?.dart + .pageActive(false); + MainPageBBottomChange.jumpTo(2); + Get.until((route) => + Get.currentRoute == + "/mianPageBottomChange"); + } catch (e) { + DailyLogUtils.writeError("发生异常: $e"); + } }, text: '控制', options: FFButtonOptions( diff --git a/lib/pages/mh_page/device/mht_bind_device_type.dart b/lib/pages/mh_page/device/mht_bind_device_type.dart index 41f1b57..2cf32c5 100644 --- a/lib/pages/mh_page/device/mht_bind_device_type.dart +++ b/lib/pages/mh_page/device/mht_bind_device_type.dart @@ -124,7 +124,7 @@ class _MHTBindDeviceTypePageState extends State { bottom: 26.rpx), // 添加每个设备之间的间隔 child: _buildDeviceCard( context, - title: device['name'], // 这里假设 device 是一个 Map + title: device['name'], imageUrl: device['image'], type: device['type'], desc: device['desc'] ?? [], diff --git a/lib/pages/mh_page/device/mht_blueteeth_device_page.dart b/lib/pages/mh_page/device/mht_blueteeth_device_page.dart index 28a3461..e955e1f 100644 --- a/lib/pages/mh_page/device/mht_blueteeth_device_page.dart +++ b/lib/pages/mh_page/device/mht_blueteeth_device_page.dart @@ -19,8 +19,8 @@ import 'package:vbvs_app/pages/mh_page/device/controller/mht_bluetooth_controlle import 'package:vbvs_app/pages/mh_page/device/model/BlueToothDataModel.dart'; class MHTBlueteethDevicePage extends StatefulWidget { - var data; - MHTBlueteethDevicePage({super.key, required this.data}); + var deviceType; + MHTBlueteethDevicePage({super.key, required this.deviceType}); @override State createState() => _MHTBlueteethDevicePageState(); @@ -146,10 +146,8 @@ class _MHTBlueteethDevicePageState extends State { final filteredResults = results.where((r) { final localName = r.advertisementData.localName; final isTarget = r.rssi > signalThreshold && - isTargetDevice(localName, widget.data['reg'].cast()); - + isTargetDevice(localName, widget.deviceType['reg'].cast()); if (!isTarget) return false; - final name = r.advertisementData.advName.toLowerCase(); String macAddress = r.device.remoteId.str; final mac = macAddress.replaceAll(':', ''); @@ -164,14 +162,34 @@ class _MHTBlueteethDevicePageState extends State { return true; }).map((r) { return BlueToothDataModel.fromScanResult( - r, widget.data['type']?.toInt(), + r, widget.deviceType['type']?.toInt(), bind: false, name: r.advertisementData.localName, mac: r.device.remoteId.str.replaceAll(':', '')); }).toList(); + final currentDevices = mhtBlueToothController.model.blueRawData ?? []; + final newDevices = []; + + for (var newDevice in filteredResults) { + // 检查设备是否已存在 + final existingIndex = + currentDevices.indexWhere((d) => d.mac == newDevice.mac); + + if (existingIndex >= 0) { + // 更新已有设备信息(如信号强度) + currentDevices[existingIndex] = newDevice; + } else { + // 添加新设备 + newDevices.add(newDevice); + } + } + setState(() { - mhtBlueToothController.model.blueRawData = filteredResults; + mhtBlueToothController.model.blueRawData = [ + ...currentDevices, + ...newDevices + ]; }); }); @@ -189,6 +207,7 @@ class _MHTBlueteethDevicePageState extends State { void _startPeriodicScan() { _timer = Timer.periodic(Duration(seconds: 10), (timer) { if (mhtBlueToothController.shouldScan.value && !isScanning) { + _removeOldDevices(); // 先清理老旧设备 _startScanning(); } }); @@ -617,6 +636,7 @@ class _MHTBlueteethDevicePageState extends State { .map((device) { return DeviceComponentWidget( bleDevice: device, + deviceType: widget.deviceType, ); }) .toList() @@ -693,4 +713,20 @@ class _MHTBlueteethDevicePageState extends State { ), ); } + + void _removeOldDevices() { + final now = DateTime.now(); + final currentDevices = mhtBlueToothController.model.blueRawData ?? []; + + // 移除30秒内未出现的设备 + final updatedDevices = currentDevices.where((device) { + return now.difference(device.lastSeen) < Duration(seconds: 30); + }).toList(); + + if (updatedDevices.length != currentDevices.length) { + setState(() { + mhtBlueToothController.model.blueRawData = updatedDevices; + }); + } + } } diff --git a/lib/pages/mh_page/device/mht_people_info.dart b/lib/pages/mh_page/device/mht_people_info.dart index e9c8610..f54b6e1 100644 --- a/lib/pages/mh_page/device/mht_people_info.dart +++ b/lib/pages/mh_page/device/mht_people_info.dart @@ -39,7 +39,7 @@ class _MHTPeopleInfoPageState extends State { peopleList.add({ 'mac': device?.macA, 'gender': "男", - 'id':device!.macAID, + 'id': device!.macAID, }); // Initialize person B if exists @@ -47,7 +47,7 @@ class _MHTPeopleInfoPageState extends State { peopleList.add({ 'mac': device.macB, 'gender': "男", - 'id':device!.macBID, + 'id': device!.macBID, }); } @@ -113,7 +113,7 @@ class _MHTPeopleInfoPageState extends State { ? DateFormat('yyyy-MM-dd').format(personData['birthday']) : personData['birthday'], 'contact': personData['contact'], - 'id':personData['id'], + 'id': personData['id'], }; await requestWithLog( logTitle: "保存用户信息", @@ -124,7 +124,8 @@ class _MHTPeopleInfoPageState extends State { print(res); }, onFailure: (res) { - TopSlideNotification.show(context,text: res.msg!,textColor: themeController.currentColor.sc9); + TopSlideNotification.show(context, + text: res.msg!, textColor: themeController.currentColor.sc9); print(res); }, ); @@ -306,42 +307,42 @@ class _MHTPeopleInfoPageState extends State { width: double.infinity, height: 90.rpx, decoration: BoxDecoration(), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - '性别', - style: TextStyle( - fontFamily: 'Readex Pro', - color: Color(0xFF9EA4B7), - fontSize: 30.rpx, - letterSpacing: 0, - ), - ), - InkWell( - onTap: () { - FocusScope.of(context) - .requestFocus(FocusNode()); - Future.delayed( - const Duration(milliseconds: 250), - () { - showOneSelectionDialog(context, - arr: ["女", "男"], - checkIndex: peopleList[index] - ['gender'] == - "女" - ? 0 - : 1, checkChange: (sindex) { - setState(() { - peopleList[index]['gender'] = - sindex == 0 ? "女" : "男"; - }); - }).then((d) {}); + child: InkWell( + onTap: () { + FocusScope.of(context) + .requestFocus(FocusNode()); + Future.delayed( + const Duration(milliseconds: 250), + () { + showOneSelectionDialog(context, + arr: ["女", "男"], + checkIndex: peopleList[index] + ['gender'] == + "女" + ? 0 + : 1, checkChange: (sindex) { + setState(() { + peopleList[index]['gender'] = + sindex == 0 ? "女" : "男"; }); - }, - child: Row( + }).then((d) {}); + }); + }, + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + '性别', + style: TextStyle( + fontFamily: 'Readex Pro', + color: Color(0xFF9EA4B7), + fontSize: 30.rpx, + letterSpacing: 0, + ), + ), + Row( mainAxisSize: MainAxisSize.max, children: [ Container( @@ -365,8 +366,8 @@ class _MHTPeopleInfoPageState extends State { ), ], ), - ), - ], + ], + ), ), ), getLine(), @@ -376,43 +377,43 @@ class _MHTPeopleInfoPageState extends State { margin: EdgeInsets.only( left: 40.rpx, right: 35.rpx), decoration: BoxDecoration(), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - '身高(cm)', - style: TextStyle( - fontFamily: 'Readex Pro', - color: Color(0xFF9EA4B7), - fontSize: 30.rpx, - letterSpacing: 0, + child: InkWell( + onTap: () { + FocusScope.of(context) + .requestFocus(FocusNode()); + Future.delayed( + const Duration(milliseconds: 250), + () { + showHeightPickerDialog( + context, + initialHeight: int.tryParse( + peopleList[index]['height'] ?? + '170') ?? + 170, + onConfirm: (int selectedHeight) { + setState(() { + peopleList[index]['height'] = + selectedHeight.toString(); + }); + }, + ); + }); + }, + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + '身高(cm)', + style: TextStyle( + fontFamily: 'Readex Pro', + color: Color(0xFF9EA4B7), + fontSize: 30.rpx, + letterSpacing: 0, + ), ), - ), - InkWell( - onTap: () { - FocusScope.of(context).unfocus(); - Future.delayed( - const Duration(milliseconds: 250), - () { - showHeightPickerDialog( - context, - initialHeight: int.tryParse( - peopleList[index] - ['height'] ?? - '170') ?? - 170, - onConfirm: (int selectedHeight) { - setState(() { - peopleList[index]['height'] = - selectedHeight.toString(); - }); - }, - ); - }); - }, - child: Row( + Row( children: [ Text( peopleList[index]['height'] != @@ -431,8 +432,8 @@ class _MHTPeopleInfoPageState extends State { size: 48.rpx), ], ), - ), - ], + ], + ), ), ), getLine(), @@ -442,39 +443,40 @@ class _MHTPeopleInfoPageState extends State { margin: EdgeInsets.only( left: 40.rpx, right: 35.rpx), decoration: BoxDecoration(), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - '体重(kg)', - style: TextStyle( - fontFamily: 'Readex Pro', - color: Color(0xFF9EA4B7), - fontSize: 30.rpx, - letterSpacing: 0, + child: InkWell( + onTap: () { + FocusScope.of(context) + .requestFocus(FocusNode()); + Future.delayed( + const Duration(milliseconds: 250), + () { + showWeightPickerDialog( + context, + initialWeight: "50", + onConfirm: (int selectedWeight) { + setState(() { + peopleList[index]['weight'] = + selectedWeight.toString(); + }); + }, + ); + }); + }, + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + '体重(kg)', + style: TextStyle( + fontFamily: 'Readex Pro', + color: Color(0xFF9EA4B7), + fontSize: 30.rpx, + letterSpacing: 0, + ), ), - ), - InkWell( - onTap: () { - FocusScope.of(context).unfocus(); - Future.delayed( - const Duration(milliseconds: 250), - () { - showWeightPickerDialog( - context, - initialWeight: "0", - onConfirm: (int selectedWeight) { - setState(() { - peopleList[index]['weight'] = - selectedWeight.toString(); - }); - }, - ); - }); - }, - child: Row( + Row( children: [ Text( peopleList[index]['weight'] != @@ -493,8 +495,8 @@ class _MHTPeopleInfoPageState extends State { size: 48.rpx), ], ), - ), - ], + ], + ), ), ), getLine(), @@ -504,46 +506,44 @@ class _MHTPeopleInfoPageState extends State { margin: EdgeInsets.only( left: 40.rpx, right: 35.rpx), decoration: BoxDecoration(), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - '生日', - style: TextStyle( - fontFamily: 'Readex Pro', - color: Color(0xFF9EA4B7), - fontSize: 30.rpx, - letterSpacing: 0, - ), - ), - InkWell( - onTap: () { - FocusScope.of(context) - .requestFocus(FocusNode()); - Future.delayed( - const Duration(milliseconds: 250), - () { - showDateSelectionDialog(context, - checkDate: peopleList[index] - ['birthday'] is DateTime - ? peopleList[index] - ['birthday'] - : DateTime.tryParse( - peopleList[index][ - 'birthday'] ?? - '') ?? - DateTime.now(), - checkChange: (DateTime d) { - setState(() { - peopleList[index]['birthday'] = - d; - }); - }).then((d) {}); + child: InkWell( + onTap: () { + FocusScope.of(context) + .requestFocus(FocusNode()); + Future.delayed( + const Duration(milliseconds: 250), + () { + showDateSelectionDialog(context, + checkDate: peopleList[index] + ['birthday'] is DateTime + ? peopleList[index]['birthday'] + : DateTime.tryParse( + peopleList[index] + ['birthday'] ?? + '') ?? + DateTime.now(), + checkChange: (DateTime d) { + setState(() { + peopleList[index]['birthday'] = d; }); - }, - child: Row( + }).then((d) {}); + }); + }, + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + '生日', + style: TextStyle( + fontFamily: 'Readex Pro', + color: Color(0xFF9EA4B7), + fontSize: 30.rpx, + letterSpacing: 0, + ), + ), + Row( mainAxisSize: MainAxisSize.max, children: [ Container( @@ -574,8 +574,8 @@ class _MHTPeopleInfoPageState extends State { ), ], ), - ), - ], + ], + ), ), ), getLine(), diff --git a/lib/pages/mh_page/device/model/BlueToothDataModel.dart b/lib/pages/mh_page/device/model/BlueToothDataModel.dart index b23d194..af062fa 100644 --- a/lib/pages/mh_page/device/model/BlueToothDataModel.dart +++ b/lib/pages/mh_page/device/model/BlueToothDataModel.dart @@ -1,7 +1,7 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart'; class BlueToothDataModel { - String name;//设备型号 + String name; // 设备型号 bool bind; String mac; ScanResult scanResult; @@ -10,6 +10,7 @@ class BlueToothDataModel { int type; String? macAID; String? macBID; + DateTime lastSeen; // 添加的最后可见时间字段 BlueToothDataModel({ this.name = '', @@ -19,6 +20,7 @@ class BlueToothDataModel { required this.type, this.macA = '', this.macB = '', + required this.lastSeen, // 添加到构造函数参数 }); factory BlueToothDataModel.fromScanResult(ScanResult result, int type, @@ -28,6 +30,14 @@ class BlueToothDataModel { name.isNotEmpty ? name : (result.advertisementData.localName ?? ''); return BlueToothDataModel( - name: finalName, bind: bind, mac: mac, scanResult: result, type: type); + name: finalName, + bind: bind, + mac: mac, + scanResult: result, + type: type, + macA: '', // 保持原有默认值 + macB: '', // 保持原有默认值 + lastSeen: DateTime.now(), // 设置为当前时间 + ); } -} +} \ No newline at end of file diff --git a/lib/pages/mh_page/homepage/component/HomeDeviceStausWidget.dart b/lib/pages/mh_page/homepage/component/HomeDeviceStausWidget.dart index 172781f..d97d516 100644 --- a/lib/pages/mh_page/homepage/component/HomeDeviceStausWidget.dart +++ b/lib/pages/mh_page/homepage/component/HomeDeviceStausWidget.dart @@ -86,7 +86,7 @@ class _HomeDeviceStausWidgetState extends State { }); await future; await webviewTestController.web.jsbridge?.dart - .pageActive(); + .pageActive(false); MainPageBBottomChange.jumpTo(2); } catch (e) { DailyLogUtils.writeError("发生异常: $e"); 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 58ec9ca..146549c 100644 --- a/lib/pages/mh_page/homepage/mht_sleep_report_page.dart +++ b/lib/pages/mh_page/homepage/mht_sleep_report_page.dart @@ -4,6 +4,7 @@ import 'package:flutterflow_ui/flutterflow_ui.dart'; import 'package:vbvs_app/common/color/app_uri_status.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.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/pages/mh_page/homepage/controller/mht_home_controller.dart'; @@ -38,11 +39,11 @@ class _MhtSleepReportPageState extends State { deviceController.getDeviceList(group: 'room').then((apiResponse) { if (apiResponse.code != HttpStatusCodes.ok) { if (context.mounted) { - TopSlideNotification.show( - context, - text: apiResponse.msg!, - textColor: themeController.currentColor.sc9, - ); + // TopSlideNotification.show( + // context, + // text: apiResponse.msg!, + // textColor: themeController.currentColor.sc9, + // ); } } else { //请求睡眠报告 @@ -257,6 +258,9 @@ class _MhtSleepReportPageState extends State { ), ); } + if (userInfoController.model.login != null && + userInfoController.model.login == 1) + return Expanded(child: NullDataWidget()); return Container(); }), @@ -273,7 +277,7 @@ class _MhtSleepReportPageState extends State { 'backgroundImg': 'assets/images/new_background.png', 'arrow': false, - 'noBackImg':true, + 'noBackImg': true, }, ), ); diff --git a/lib/pages/mh_page/homepage/new_Home_page.dart b/lib/pages/mh_page/homepage/new_Home_page.dart index c72abe3..0e9a4de 100644 --- a/lib/pages/mh_page/homepage/new_Home_page.dart +++ b/lib/pages/mh_page/homepage/new_Home_page.dart @@ -45,20 +45,20 @@ class _NewHomePageState extends State { // homeController.getSleepReport(); deviceController.getDeviceNum().then((apiResponse) { if (apiResponse.code != HttpStatusCodes.ok) { - TopSlideNotification.show( - Get.context!, - text: apiResponse.msg!, - textColor: themeController.currentColor.sc9, - ); + // TopSlideNotification.show( + // Get.context!, + // text: apiResponse.msg!, + // textColor: themeController.currentColor.sc9, + // ); } }); deviceController.getDeviceList(group: 'room').then((apiResponse) { if (apiResponse.code != HttpStatusCodes.ok) { - TopSlideNotification.show( - Get.context!, - text: apiResponse.msg!, - textColor: themeController.currentColor.sc9, - ); + // TopSlideNotification.show( + // Get.context!, + // text: apiResponse.msg!, + // textColor: themeController.currentColor.sc9, + // ); } else { //请求睡眠报告 // deviceController.getSleepReport(); @@ -105,11 +105,11 @@ class _NewHomePageState extends State { Widget build(BuildContext context) { deviceController.getDeviceList(group: 'room').then((apiResponse) { if (apiResponse.code != HttpStatusCodes.ok) { - TopSlideNotification.show( - context, - text: apiResponse.msg!, - textColor: themeController.currentColor.sc9, - ); + // TopSlideNotification.show( + // context, + // text: apiResponse.msg!, + // textColor: themeController.currentColor.sc9, + // ); } else { //请求睡眠报告 // deviceController.getSleepReport(); @@ -121,21 +121,21 @@ class _NewHomePageState extends State { //请求绑定设备列表 // homeController.getSleepReport(); deviceController.getDeviceNum().then((apiResponse) { - if (apiResponse.code != HttpStatusCodes.ok) { - TopSlideNotification.show( - Get.context!, - text: apiResponse.msg!, - textColor: themeController.currentColor.sc9, - ); - } + // if (apiResponse.code != HttpStatusCodes.ok) { + // TopSlideNotification.show( + // Get.context!, + // text: apiResponse.msg!, + // textColor: themeController.currentColor.sc9, + // ); + // } }); deviceController.getDeviceList(group: 'room').then((apiResponse) { if (apiResponse.code != HttpStatusCodes.ok) { - TopSlideNotification.show( - Get.context!, - text: apiResponse.msg!, - textColor: themeController.currentColor.sc9, - ); + // TopSlideNotification.show( + // Get.context!, + // text: apiResponse.msg!, + // textColor: themeController.currentColor.sc9, + // ); } else { //请求睡眠报告 // deviceController.getSleepReport(); diff --git a/lib/pages/mh_page/people_info.dart b/lib/pages/mh_page/people_info.dart index 17969a4..d45dfd1 100644 --- a/lib/pages/mh_page/people_info.dart +++ b/lib/pages/mh_page/people_info.dart @@ -310,7 +310,7 @@ class PeopleInfoPage extends GetView { decoration: BoxDecoration(), child: InkWell( onTap: () { - // 触摸收起键盘 + // 延迟执行的代码 FocusScope.of(context) .requestFocus( FocusNode()); @@ -318,7 +318,6 @@ class PeopleInfoPage extends GetView { const Duration( milliseconds: 250), () { - // 延迟执行的代码 showOneSelectionDialog( context, arr: ["女", "男"], @@ -338,12 +337,6 @@ class PeopleInfoPage extends GetView { sindex; // 👈 保存为 0 / 1 controller .updateAll(); - print( - "gender $sindex"); - }).then((d) { - // Timer(Duration.zero, () { - // FocusScope.of(context).unfocus(); - // }); }); }); }, @@ -409,77 +402,6 @@ class PeopleInfoPage extends GetView { )), ), getLine(), - // Container( - // width: double.infinity, - // height: 90.rpx, - // margin: EdgeInsets.only( - // left: 40.rpx, right: 35.rpx), - // decoration: BoxDecoration(), - // child: Row( - // mainAxisSize: MainAxisSize.max, - // mainAxisAlignment: - // MainAxisAlignment.spaceBetween, - // children: [ - // Text( - // '身高(cm)', - // style: TextStyle( - // fontFamily: 'Readex Pro', - // color: Color(0xFF9EA4B7), - // fontSize: 30.rpx, - // letterSpacing: 0, - // ), - // ), - // InkWell( - // onTap: () { - // FocusScope.of(context).unfocus(); - // Future.delayed( - // const Duration( - // milliseconds: 250), () { - // showHeightPickerDialog( - // context, - // initialHeight: controller - // .model - // .peopleList[index] - // ['height'] ?? - // 170, - // onConfirm: - // (int selectedHeight) { - // controller.model.peopleList[ - // index]['height'] = - // selectedHeight - // .toString(); - // controller.updateAll(); - // print( - // "身高: $selectedHeight cm"); - // }, - // ); - // }); - // }, - // child: Row( - // children: [ - // Text( - // controller.model.peopleList[ - // index] - // ['height'] != - // null - // ? "${controller.model.peopleList[index]['height']} cm" - // : '', - // style: TextStyle( - // fontFamily: 'Readex Pro', - // color: Colors.white, - // fontSize: 30.rpx, - // ), - // ), - // SizedBox(width: 16.rpx), - // Icon(Icons.expand_more, - // color: Colors.white, - // size: 48.rpx), - // ], - // ), - // ), - // ], - // ), - // ), Container( width: double.infinity, height: 90.rpx, @@ -489,25 +411,26 @@ class PeopleInfoPage extends GetView { decoration: BoxDecoration(), child: InkWell( onTap: () { + // Convert string height to int for initial value + final currentHeight = + controller.model + .peopleList[ + index]['height']; + final initialHeight = + currentHeight != null + ? int.tryParse( + currentHeight + .toString()) ?? + 170 + : 170; + FocusScope.of(context) - .unfocus(); + .requestFocus( + FocusNode()); Future.delayed( const Duration( milliseconds: 250), () { - // Convert string height to int for initial value - final currentHeight = - controller.model - .peopleList[ - index]['height']; - final initialHeight = - currentHeight != null - ? int.tryParse( - currentHeight - .toString()) ?? - 170 - : 170; - showHeightPickerDialog( context, initialHeight: @@ -591,7 +514,8 @@ class PeopleInfoPage extends GetView { child: InkWell( onTap: () { FocusScope.of(context) - .unfocus(); + .requestFocus( + FocusNode()); Future.delayed( const Duration( milliseconds: @@ -674,7 +598,6 @@ class PeopleInfoPage extends GetView { ), )), ), - getLine(), Obx( () => Container( @@ -686,7 +609,7 @@ class PeopleInfoPage extends GetView { decoration: BoxDecoration(), child: InkWell( onTap: () { - // 触摸收起键盘 + // 延迟执行的代码 FocusScope.of(context) .requestFocus( FocusNode()); @@ -694,7 +617,6 @@ class PeopleInfoPage extends GetView { const Duration( milliseconds: 250), () { - // 延迟执行的代码 showDateSelectionDialog( context, checkDate: controller @@ -718,10 +640,6 @@ class PeopleInfoPage extends GetView { controller .updateAll(); print("$d"); - }).then((d) { - // Timer(Duration.zero, () { - // FocusScope.of(context).unfocus(); - // }); }); }); }, diff --git a/lib/pages/mh_page/privacy_policy.dart b/lib/pages/mh_page/privacy_policy.dart index 1e859d1..7879c0b 100644 --- a/lib/pages/mh_page/privacy_policy.dart +++ b/lib/pages/mh_page/privacy_policy.dart @@ -71,7 +71,6 @@ class _PrivacyPolicyPageState extends State { fontSize: 30.rpx, ), ), - /// 左边返回按钮 Positioned( left: 0, diff --git a/lib/pages/mh_page/test/WebviewTestModel.dart b/lib/pages/mh_page/test/WebviewTestModel.dart index 1fea3a2..c970690 100644 --- a/lib/pages/mh_page/test/WebviewTestModel.dart +++ b/lib/pages/mh_page/test/WebviewTestModel.dart @@ -32,10 +32,17 @@ class WebviewTestController extends GetControllerEx { WebviewTestController() : super(WebviewTestModel()) { web = WebviewHelper( jsbridge: buildsdk( +<<<<<<< HEAD // father: this, // clientId: '494641114', // dbgserverUrl: 'ws://192.168.1.2:9001', ), +======= + father: this, + clientId: '494641114', + // dbgserverUrl: 'ws://192.168.1.2:9001', + ), +>>>>>>> 58b2bebe936bdd7239529662ef20b531f2143de4 settings: buildsettings(), params: PlatformHeadlessInAppWebViewCreationParams( initialUrlRequest: URLRequest( @@ -90,6 +97,7 @@ class WebviewTestController extends GetControllerEx { ef.log('updateBlueToothStatus: $args'); // bluetooth = args[0]; MHTHomeController deviceController = Get.find(); + await deviceController.getDeviceList(group: 'room'); final allDevices = deviceController.deviceList.values .expand((list) => list) .toList(); @@ -112,12 +120,7 @@ class WebviewTestController extends GetControllerEx { ef.log('queryInstantData: $args'); // bluetooth = args[0]; return instantData; - }); - bridge.sdk.queryInstantData((args) async { - ef.log('queryInstantData: $args'); - // bluetooth = args[0]; - return instantData; - }); + }); bridge.sdk.startTimer((args) async { ef.log('queryInstantData: $args'); MHTHomeController homeController = Get.find(); diff --git a/lib/pages/sleep_report/chart/TimeSeriesChart.dart b/lib/pages/sleep_report/chart/TimeSeriesChart.dart index f3ce82f..b4975a4 100644 --- a/lib/pages/sleep_report/chart/TimeSeriesChart.dart +++ b/lib/pages/sleep_report/chart/TimeSeriesChart.dart @@ -1,6 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:fl_chart/fl_chart.dart'; -import 'package:vbvs_app/common/color/appConstants.dart'; +import 'package:flutter/material.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; diff --git a/lib/pages/sleep_report/component/HeartChangeWidget.dart b/lib/pages/sleep_report/component/HeartChangeWidget.dart index 7e4b92c..13aa542 100644 --- a/lib/pages/sleep_report/component/HeartChangeWidget.dart +++ b/lib/pages/sleep_report/component/HeartChangeWidget.dart @@ -148,13 +148,16 @@ class _HeartChangeWidgetState extends State { alignment: MainAxisAlignment.center, widget1: Row( children: [ - Text( - '${data['name']}', - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: themeController.currentColor.sc3, - fontSize: AppConstants().normal_text_fontSize, + Expanded( + child: Text( + '${data['name']}', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: themeController.currentColor.sc3, + fontSize: + AppConstants().normal_text_fontSize, + ), ), ), ClickableContainer( @@ -261,7 +264,7 @@ class _HeartChangeWidgetState extends State { ), ); } catch (e) { - es.EasyDartModule.logger.error("打鼾监测绘制异常${e}"); + es.EasyDartModule.logger.error("打鼾监测绘制异常${e}"); return Container(); } } diff --git a/lib/pages/sleep_report/new_sleep_report_page.dart b/lib/pages/sleep_report/new_sleep_report_page.dart index 7252701..2e69418 100644 --- a/lib/pages/sleep_report/new_sleep_report_page.dart +++ b/lib/pages/sleep_report/new_sleep_report_page.dart @@ -6,10 +6,10 @@ import 'package:vbvs_app/common/color/appConstants.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/requestWithLog.dart'; +import 'package:vbvs_app/component/NullDataComponentWidget.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/date/CalendarController.dart'; -import 'package:vbvs_app/controller/home/home_controller.dart'; import 'package:vbvs_app/controller/sleep/sleep_report_controller.dart'; import 'package:vbvs_app/language/AppLanguage.dart'; import 'package:vbvs_app/pages/common/selectDialog.dart'; @@ -147,8 +147,15 @@ class _NewSleepReportPageState extends State { _scrollToTargetComponent(sleepReportController.sleepReport); }, onFailure: (res) { - TopSlideNotification.show(context, - text: res.msg!, textColor: themeController.currentColor.sc9); + if (MainPageBBottomChange.getCurrentIndex() != null) { + if (MainPageBBottomChange.getCurrentIndex() == 1) { + TopSlideNotification.show(context, + text: res.msg!, textColor: themeController.currentColor.sc9); + } + } else { + TopSlideNotification.show(context, + text: res.msg!, textColor: themeController.currentColor.sc9); + } sleepReportController.sleepReport.value = {}; sleepReportController.updateAll(); print(res); @@ -609,6 +616,12 @@ class _NewSleepReportPageState extends State { ), ), ), + if (sleepReport.value == null || + sleepReport.value.isEmpty) + Container( + height: 500.rpx, + child: NullDataWidget(), + ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 30.rpx, 0.rpx, 30.rpx, 0), @@ -851,8 +864,16 @@ class _NewSleepReportPageState extends State { sleepReportController.updateAll(); }, onFailure: (res) { - TopSlideNotification.show(context, - text: res.msg!, textColor: themeController.currentColor.sc9); + if (MainPageBBottomChange.getCurrentIndex() != null) { + if (MainPageBBottomChange.getCurrentIndex() == 1) { + TopSlideNotification.show(context, + text: res.msg!, + textColor: themeController.currentColor.sc9); + } + } else { + TopSlideNotification.show(context, + text: res.msg!, textColor: themeController.currentColor.sc9); + } sleepReportController.sleepReport.value = {}; sleepReportController.updateAll(); print(res); @@ -890,8 +911,16 @@ class _NewSleepReportPageState extends State { sleepReportController.updateAll(); }, onFailure: (res) { - TopSlideNotification.show(context, - text: res.msg!, textColor: themeController.currentColor.sc9); + if (MainPageBBottomChange.getCurrentIndex() != null) { + if (MainPageBBottomChange.getCurrentIndex() == 1) { + TopSlideNotification.show(context, + text: res.msg!, + textColor: themeController.currentColor.sc9); + } + } else { + TopSlideNotification.show(context, + text: res.msg!, textColor: themeController.currentColor.sc9); + } sleepReportController.sleepReport.value = {}; sleepReportController.updateAll(); print(res); @@ -974,9 +1003,17 @@ class _NewSleepReportPageState extends State { sleepReportController.updateAll(); }, onFailure: (res) { - TopSlideNotification.show(context, - text: res.msg!, - textColor: themeController.currentColor.sc9); + if (MainPageBBottomChange.getCurrentIndex() != null) { + if (MainPageBBottomChange.getCurrentIndex() == 1) { + TopSlideNotification.show(context, + text: res.msg!, + textColor: themeController.currentColor.sc9); + } + } else { + TopSlideNotification.show(context, + text: res.msg!, + textColor: themeController.currentColor.sc9); + } sleepReportController.sleepReport.value = {}; sleepReportController.updateAll(); print(res); diff --git a/lib/routers/mh_routers.dart b/lib/routers/mh_routers.dart index 0ae14e3..603fcd1 100644 --- a/lib/routers/mh_routers.dart +++ b/lib/routers/mh_routers.dart @@ -94,7 +94,7 @@ var mhroutes = { "/deviceListPage": (context) => DeviceListPage(), "/mHTDeviceTypePage": (context, {arguments}) => MHTBindDeviceTypePage(), "/mHTBlueteethDevicePage": (context, {arguments}) => - MHTBlueteethDevicePage(data: arguments), + MHTBlueteethDevicePage(deviceType: arguments), "/mHTwifiPage": (contxt, {arguments}) => MHTWifiPage(deviceInfo: arguments), "/calibrationPage": (contxt) => MHTCalibrationPage(), "/bindDeviceSuccess": (contxt) => MHTBindDeviceSuccess(), diff --git a/pubspec.yaml b/pubspec.yaml index a48e813..8eaf9af 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -65,7 +65,7 @@ dependencies: easyweb: git: url: https://gitea.wslpc.real.he-info.cn:94/flutter/easyweb.git - ref: e86d515f77 + ref: main archive: ^4.0.0