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 c8437a4..33da9b7 100644 --- a/lib/pages/mh_page/device/controller/mht_bluetooth_controller.dart +++ b/lib/pages/mh_page/device/controller/mht_bluetooth_controller.dart @@ -241,6 +241,7 @@ class MHTBlueToothController extends GetControllerEx { if (currentFullDevice != null) { currentFullDevice!.macAID = res.data['macA']; currentFullDevice!.macBID = res.data['macB']; + currentFullDevice!.deviceID = res.data['id']; } } return res; diff --git a/lib/pages/mh_page/device/mht_people_info.dart b/lib/pages/mh_page/device/mht_people_info.dart index 1641c6b..400f697 100644 --- a/lib/pages/mh_page/device/mht_people_info.dart +++ b/lib/pages/mh_page/device/mht_people_info.dart @@ -195,7 +195,12 @@ class _MHTPeopleInfoPageState extends State { TopSlideNotification.show(context, text: "保存成功"); MHTHomeController mhtHomeController = Get.find(); mhtHomeController.getPersonList(); - Get.offNamed("/bindDeviceSuccess"); + // Get.offNamed("/bindDeviceSuccess"); + Map data = {}; + final device = bluetoothController.currentFullDevice; + data['_id'] = device!.deviceID; + data['isNextStep'] = true; + Get.toNamed("/editBedPage", arguments: data); }, colors: const [ Color(0xFFFCFCFC), diff --git a/lib/pages/mh_page/device/model/BlueToothDataModel.dart b/lib/pages/mh_page/device/model/BlueToothDataModel.dart index af062fa..1fee575 100644 --- a/lib/pages/mh_page/device/model/BlueToothDataModel.dart +++ b/lib/pages/mh_page/device/model/BlueToothDataModel.dart @@ -10,7 +10,8 @@ class BlueToothDataModel { int type; String? macAID; String? macBID; - DateTime lastSeen; // 添加的最后可见时间字段 + DateTime lastSeen; // 最后可见时间 + String? deviceID; // 设备ID BlueToothDataModel({ this.name = '', @@ -20,12 +21,18 @@ class BlueToothDataModel { required this.type, this.macA = '', this.macB = '', - required this.lastSeen, // 添加到构造函数参数 + required this.lastSeen, + this.deviceID, // ✅ 加入构造函数参数 }); - factory BlueToothDataModel.fromScanResult(ScanResult result, int type, - {bool bind = false, String name = '', String mac = ''}) { - // 如果外部没有传入 name,则取 localName + factory BlueToothDataModel.fromScanResult( + ScanResult result, + int type, { + bool bind = false, + String name = '', + String mac = '', + String? deviceID, // ✅ 工厂方法接收 deviceID + }) { String finalName = name.isNotEmpty ? name : (result.advertisementData.localName ?? ''); @@ -35,9 +42,10 @@ class BlueToothDataModel { mac: mac, scanResult: result, type: type, - macA: '', // 保持原有默认值 - macB: '', // 保持原有默认值 - lastSeen: DateTime.now(), // 设置为当前时间 + macA: '', + macB: '', + lastSeen: DateTime.now(), + deviceID: deviceID, // ✅ 赋值 ); } -} \ No newline at end of file +} diff --git a/lib/pages/mh_page/edit_bed.dart b/lib/pages/mh_page/edit_bed.dart index 40747e4..5cdf5ec 100644 --- a/lib/pages/mh_page/edit_bed.dart +++ b/lib/pages/mh_page/edit_bed.dart @@ -9,11 +9,17 @@ import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/mh_controller/device_list_controller.dart'; import 'package:vbvs_app/pages/mh_page/bluetooth.dart'; +import 'package:vbvs_app/pages/mh_page/device/controller/mht_bluetooth_controller.dart'; import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart'; class EditBedPage extends StatefulWidget { final Map data; - EditBedPage({Key? key, required this.data}); + + EditBedPage({ + Key? key, + required this.data, + }) : super(key: key); + @override _EditBedPageState createState() => _EditBedPageState(); } @@ -79,6 +85,70 @@ class _EditBedPageState extends State { left: 0.rpx, child: returnIconButtomNew, ), + if (widget.data != null && + (widget.data['isNextStep'] != null && + widget.data['isNextStep'] == true)) + Positioned( + right: 30.rpx, + child: CustomCard( + borderRadius: 16.rpx, + gradientDirection: GradientDirection.vertical, + onTap: () async { + String serviceAddress = + ServiceConstant.service_address; + String serviceName = ServiceConstant.server_service; + String serviceApi = ServiceConstant.device_show; + String queryUrl = + "$serviceAddress$serviceName$serviceApi"; + await requestWithLog( + logTitle: "更新设备信息", + method: MyHttpMethod.put, + queryUrl: queryUrl, + data: { + "id": editedData["_id"], + "name": editedData["name"], + }, + onSuccess: (res) { + TopSlideNotification.show(context, + text: "修改名称成功".tr); + deviceListController.getDeviceList(); + + Map data = {}; + final MHTBlueToothController + bluetoothController = Get.find(); + final device = + bluetoothController.currentFullDevice; + data['_id'] = device!.deviceID; + data['isNextStep'] = true; + Get.toNamed("/roomPickerPage", + arguments: data); + }, + ); + }, + colors: const [ + Color(0xFFFCFCFC), + Color(0xFFF8FAF9), + Color(0XFFECF6F3), + Color(0XFFD9F0E9), + Color(0xFFCEECE3) + ], + child: Container( + width: 120.rpx, + height: 60.rpx, + alignment: Alignment.center, + child: Text( + "下一步", + style: TextStyle( + fontFamily: 'Readex Pro', + color: Color(0XFF011D33), + letterSpacing: 0, + fontSize: 30.rpx, + ), + ), + ), + ), + ) + ], ), ), @@ -186,64 +256,67 @@ class _EditBedPageState extends State { ], ), ), - Padding( - padding: EdgeInsets.only( - left: 30.rpx, right: 30.rpx, bottom: 85.rpx), - child: CustomCard( - borderRadius: 16.rpx, - gradientDirection: GradientDirection.vertical, - onTap: () async { - String serviceAddress = - ServiceConstant.service_address; - String serviceName = - ServiceConstant.server_service; - String serviceApi = ServiceConstant.device_show; - String queryUrl = - "$serviceAddress$serviceName$serviceApi"; - await requestWithLog( - logTitle: "更新设备信息", - method: MyHttpMethod.put, - queryUrl: queryUrl, - data: { - "id": editedData["_id"], - "name": editedData["name"], - }, - onSuccess: (res) { - TopSlideNotification.show(context, - text: "修改名称成功".tr); - deviceListController.getDeviceList(); - try { - WebviewTestController - webviewTestController = Get.find(); - webviewTestController.web.jsbridge?.dart - .alterDevice(); - } catch (e) { - ef.log("[h5]通知列表更新错误:$e"); - } - Get.back(result: editedData); - }, - ); - }, - colors: const [ - Color(0xFFFCFCFC), - Color(0xFFF8FAF9), - Color(0XFFECF6F3), - Color(0XFFD9F0E9), - Color(0xFFCEECE3) - ], - child: Container( - width: double.infinity, - height: 90.rpx, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(6), + if (widget.data['isNextStep'] == null || + widget.data['isNextStep'] == false) + Padding( + padding: EdgeInsets.only( + left: 30.rpx, right: 30.rpx, bottom: 85.rpx), + child: CustomCard( + borderRadius: 16.rpx, + gradientDirection: GradientDirection.vertical, + onTap: () async { + String serviceAddress = + ServiceConstant.service_address; + String serviceName = + ServiceConstant.server_service; + String serviceApi = + ServiceConstant.device_show; + String queryUrl = + "$serviceAddress$serviceName$serviceApi"; + await requestWithLog( + logTitle: "更新设备信息", + method: MyHttpMethod.put, + queryUrl: queryUrl, + data: { + "id": editedData["_id"], + "name": editedData["name"], + }, + onSuccess: (res) { + TopSlideNotification.show(context, + text: "修改名称成功".tr); + deviceListController.getDeviceList(); + try { + WebviewTestController + webviewTestController = Get.find(); + webviewTestController.web.jsbridge?.dart + .alterDevice(); + } catch (e) { + ef.log("[h5]通知列表更新错误:$e"); + } + Get.back(result: editedData); + }, + ); + }, + colors: const [ + Color(0xFFFCFCFC), + Color(0xFFF8FAF9), + Color(0XFFECF6F3), + Color(0XFFD9F0E9), + Color(0xFFCEECE3) + ], + child: Container( + width: double.infinity, + height: 90.rpx, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6), + ), + child: Text("完成".tr, + style: TextStyle( + color: const Color(0xFF003058), + fontSize: 26.rpx)), ), - child: Text("完成".tr, - style: TextStyle( - color: const Color(0xFF003058), - fontSize: 26.rpx)), - ), - )) + )) ], ))), ), diff --git a/lib/pages/mh_page/room_picker.dart b/lib/pages/mh_page/room_picker.dart index 79e2938..fdb0234 100644 --- a/lib/pages/mh_page/room_picker.dart +++ b/lib/pages/mh_page/room_picker.dart @@ -85,6 +85,75 @@ class _RoomPickerPageState extends State { left: 0.rpx, child: returnIconButtomNew, ), + if (widget.data != null && + (widget.data['isNextStep'] != null && + widget.data['isNextStep'] == true)) + Positioned( + right: 30.rpx, + child: CustomCard( + borderRadius: 16.rpx, + gradientDirection: GradientDirection.vertical, + onTap: () async { + // Get.toNamed("/applyRepairPage"); + try { + String serviceAddress = + ServiceConstant.service_address; + String serviceName = + ServiceConstant.server_service; + String serviceApi = + ServiceConstant.device_show; + String queryUrl = + "$serviceAddress$serviceName$serviceApi"; + await requestWithLog( + logTitle: "更新设备信息", + method: MyHttpMethod.put, + queryUrl: queryUrl, + data: { + "id": editedData["_id"], + "roomId": rooms[selectedIndex]['_id'], + }, + onSuccess: (res) { + editedData['roomName'] = + rooms[selectedIndex]['name']; + TopSlideNotification.show(context, + text: "更新成功".tr, + textColor: Color(0XFF00C1AA)); + deviceListController.getDeviceList(); + Get.offNamed("/bindDeviceSuccess"); + }, + onFailure: (res) { + TopSlideNotification.show(context, + text: "更新失败".tr, + textColor: Color(0xFFFF7159)); + }, + ); + } catch (e) { + print(e); + } + }, + colors: const [ + Color(0xFFFCFCFC), + Color(0xFFF8FAF9), + Color(0XFFECF6F3), + Color(0XFFD9F0E9), + Color(0xFFCEECE3) + ], + child: Container( + width: 120.rpx, + height: 60.rpx, + alignment: Alignment.center, + child: Text( + "下一步", + style: TextStyle( + fontFamily: 'Readex Pro', + color: Color(0XFF011D33), + letterSpacing: 0, + fontSize: 30.rpx, + ), + ), + ), + ), + ) ], ), ), @@ -157,86 +226,90 @@ class _RoomPickerPageState extends State { ), const Spacer(), // 完成按钮 - Padding( - padding: EdgeInsets.only( - left: 30.rpx, - right: 30.rpx, - bottom: 83.rpx, - ), - child: SizedBox( - width: double.infinity, - height: 50, - child: CustomCard( - borderRadius: 16.rpx, - gradientDirection: GradientDirection.vertical, - onTap: () async { - // Get.toNamed("/applyRepairPage"); - try { - String serviceAddress = - ServiceConstant.service_address; - String serviceName = - ServiceConstant.server_service; - String serviceApi = - ServiceConstant.device_show; - String queryUrl = - "$serviceAddress$serviceName$serviceApi"; - await requestWithLog( - logTitle: "更新设备信息", - method: MyHttpMethod.put, - queryUrl: queryUrl, - data: { - "id": editedData["_id"], - "roomId": rooms[selectedIndex]['_id'], - }, - onSuccess: (res) { - editedData['roomName'] = - rooms[selectedIndex]['name']; - TopSlideNotification.show(context, - text: "更新成功".tr, - textColor: Color(0XFF00C1AA)); - deviceListController.getDeviceList(); - try { - WebviewTestController - webviewTestController = Get.find(); - webviewTestController.web.jsbridge?.dart - .alterDevice(); - } catch (e) { - ef.log("[h5]通知列表更新错误:$e"); - } - Get.back(result: editedData); - }, - onFailure: (res) { - TopSlideNotification.show(context, - text: "更新失败".tr, - textColor: Color(0xFFFF7159)); - }, - ); - } catch (e) { - print(e); - } - }, - colors: const [ - Color(0xFFFCFCFC), - Color(0xFFF8FAF9), - Color(0XFFECF6F3), - Color(0XFFD9F0E9), - Color(0xFFCEECE3) - ], - child: Container( - width: double.infinity, - height: 90.rpx, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(6), + if (widget.data['isNextStep'] == null || + widget.data['isNextStep'] == false) + Padding( + padding: EdgeInsets.only( + left: 30.rpx, + right: 30.rpx, + bottom: 83.rpx, + ), + child: SizedBox( + width: double.infinity, + height: 50, + child: CustomCard( + borderRadius: 16.rpx, + gradientDirection: GradientDirection.vertical, + onTap: () async { + // Get.toNamed("/applyRepairPage"); + try { + String serviceAddress = + ServiceConstant.service_address; + String serviceName = + ServiceConstant.server_service; + String serviceApi = + ServiceConstant.device_show; + String queryUrl = + "$serviceAddress$serviceName$serviceApi"; + await requestWithLog( + logTitle: "更新设备信息", + method: MyHttpMethod.put, + queryUrl: queryUrl, + data: { + "id": editedData["_id"], + "roomId": rooms[selectedIndex]['_id'], + }, + onSuccess: (res) { + editedData['roomName'] = + rooms[selectedIndex]['name']; + TopSlideNotification.show(context, + text: "更新成功".tr, + textColor: Color(0XFF00C1AA)); + deviceListController.getDeviceList(); + try { + WebviewTestController + webviewTestController = + Get.find(); + webviewTestController + .web.jsbridge?.dart + .alterDevice(); + } catch (e) { + ef.log("[h5]通知列表更新错误:$e"); + } + Get.back(result: editedData); + }, + onFailure: (res) { + TopSlideNotification.show(context, + text: "更新失败".tr, + textColor: Color(0xFFFF7159)); + }, + ); + } catch (e) { + print(e); + } + }, + colors: const [ + Color(0xFFFCFCFC), + Color(0xFFF8FAF9), + Color(0XFFECF6F3), + Color(0XFFD9F0E9), + Color(0xFFCEECE3) + ], + child: Container( + width: double.infinity, + height: 90.rpx, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6), + ), + child: Text("完成".tr, + style: TextStyle( + color: const Color(0xFF003058), + fontSize: 30.rpx, + )), ), - child: Text("完成".tr, - style: TextStyle( - color: const Color(0xFF003058), - fontSize: 30.rpx, - )), - ), - )), - ), + )), + ), ], ), ),