This commit is contained in:
wsl
2025-07-04 17:00:15 +08:00
25 changed files with 512 additions and 405 deletions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -205,6 +205,8 @@
"请选择身高": "请输入身高", "请选择身高": "请输入身高",
"人员资料": "人员资料", "人员资料": "人员资料",
"请输入姓名": "请输入姓名", "请输入姓名": "请输入姓名",
"解除分享":"解除分享" "解除分享": "解除分享",
"最高分": "最高分",
"最低分": "最低分",
"本周平均分":"本周平均分"
} }

View File

@@ -48,5 +48,5 @@ class AppConstants {
//系统参数 //系统参数
//运行打包APP模式 //运行打包APP模式
int ent_type = APPPackageType.TH.code;//1.默认太和 2.欢睡 3.眠花糖 int ent_type = APPPackageType.MHT.code; //1.默认太和 2.欢睡 3.眠花糖
} }

View File

@@ -81,6 +81,10 @@ class WeatherModelController extends GetControllerEx<WeatherModel> {
List<Placemark> placemarks = []; List<Placemark> placemarks = [];
// placemarks = await placemarkFromCoordinates(position.latitude, position.longitude, // placemarks = await placemarkFromCoordinates(position.latitude, position.longitude,
// localeIdentifier: language); // localeIdentifier: language);
placemarks = await placemarkFromCoordinates(
position.latitude,
position.longitude,
);
if (placemarks.isNotEmpty) { if (placemarks.isNotEmpty) {
model.cityName = placemarks[0].locality ?? "未知数据".tr; model.cityName = placemarks[0].locality ?? "未知数据".tr;

View File

@@ -195,9 +195,9 @@ Future showDateSelectionDialog(BuildContext context,
width: 100.rpx, width: 100.rpx,
height: 60.rpx, height: 60.rpx,
alignment: Alignment.center, alignment: Alignment.center,
child: Text("", child: Text("",
style: TextStyle( style: TextStyle(
fontSize: 30.rpx, color: Colors.white)), fontSize: 30.rpx, color: stringToColor("#84F5FF"))),
), ),
), ),
], ],
@@ -348,10 +348,10 @@ Future<void> showWeightPickerDialog(
width: 100.rpx, width: 100.rpx,
height: 60.rpx, height: 60.rpx,
child: Text( child: Text(
"", "",
style: TextStyle( style: TextStyle(
fontSize: 30.rpx, fontSize: 30.rpx,
color: Colors.white, color: stringToColor("#84F5FF"),
), ),
), ),
)), )),
@@ -475,10 +475,10 @@ Future<void> showHeightPickerDialog(
width: 100.rpx, width: 100.rpx,
height: 60.rpx, height: 60.rpx,
child: Text( child: Text(
"", "",
style: TextStyle( style: TextStyle(
fontSize: 30.rpx, fontSize: 30.rpx,
color: Colors.white, color: stringToColor("#84F5FF"),
), ),
), ),
)), )),
@@ -701,7 +701,7 @@ Future showDayTimeSelectionDialog(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
// 顶部栏:取消 - 标题 - 确 // 顶部栏:取消 - 标题 - 确
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
@@ -742,9 +742,9 @@ Future showDayTimeSelectionDialog(
width: 100.rpx, width: 100.rpx,
height: 60.rpx, height: 60.rpx,
alignment: Alignment.center, alignment: Alignment.center,
child: Text("".tr, child: Text("".tr,
style: TextStyle( style: TextStyle(
fontSize: 30.rpx, color: Colors.white)), fontSize: 30.rpx, color: stringToColor("#84F5FF"))),
), ),
), ),
], ],
@@ -879,9 +879,9 @@ Future showOneSelectionDialog(
alignment: Alignment.center, alignment: Alignment.center,
width: 100.rpx, width: 100.rpx,
height: 60.rpx, height: 60.rpx,
child: Text("".tr, child: Text("".tr,
style: TextStyle( style: TextStyle(
fontSize: 30.rpx, color: Colors.white)), fontSize: 30.rpx, color: stringToColor("#84F5FF"))),
), ),
), ),
], ],

View File

@@ -138,7 +138,7 @@ class _HomePageState extends State<MainPageBBottomChange>
Future<void> dealWebSource(int index) async { Future<void> dealWebSource(int index) async {
WebviewTestController webviewTestController = Get.find(); WebviewTestController webviewTestController = Get.find();
if (index == 2) { if (index == 2) {
await webviewTestController.web.jsbridge?.dart.pageActive(); await webviewTestController.web.jsbridge?.dart.pageActive(true);
} else { } else {
await webviewTestController.web.jsbridge?.dart.pageInActive(); await webviewTestController.web.jsbridge?.dart.pageInActive();
} }

View File

@@ -65,7 +65,7 @@ class LanguagePage extends GetView<MHLanguageController> {
), ),
// 左侧图标 // 左侧图标
Positioned( Positioned(
left: 20.rpx, left: 0.rpx,
child: returnIconButtomNew, child: returnIconButtomNew,
), ),
], ],

View File

@@ -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/controller/mh_controller/device_list_controller.dart';
import 'package:vbvs_app/model/api_response.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/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'; import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart';
class BluetoothPage extends StatefulWidget { class BluetoothPage extends StatefulWidget {
@@ -166,8 +167,11 @@ class _BluetoothPageState extends State<BluetoothPage> {
context, '详情', "/devicePeopleInfo", context, '详情', "/devicePeopleInfo",
arguments: obsData), arguments: obsData),
_buildMenuButton( _buildMenuButton(
context, '人员资料', "/peopleInfoPage", context,
arguments: obsData,), '人员资料',
"/peopleInfoPage",
arguments: obsData,
),
_buildMenuButton( _buildMenuButton(
context, '房间选择', "/roomPickerPage", context, '房间选择', "/roomPickerPage",
arguments: obsData), arguments: obsData),
@@ -194,6 +198,10 @@ class _BluetoothPageState extends State<BluetoothPage> {
.unbindDevice(obsData); .unbindDevice(obsData);
await deviceListController await deviceListController
.getDeviceList(); .getDeviceList();
MHTHomeController homeController =
Get.find();
homeController.selectDevcie.value =
"";
try { try {
WebviewTestController WebviewTestController
webviewTestController = webviewTestController =

View File

@@ -25,10 +25,12 @@ import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart';
class DeviceComponentWidget extends StatefulWidget { class DeviceComponentWidget extends StatefulWidget {
BlueToothDataModel bleDevice; BlueToothDataModel bleDevice;
var deviceType;
DeviceComponentWidget({ DeviceComponentWidget({
super.key, super.key,
required this.bleDevice, required this.bleDevice,
required this.deviceType,
}); });
@override @override
@@ -212,8 +214,8 @@ class _DeviceComponentWidgetState extends State<DeviceComponentWidget> {
blueteethBindController.currentDeviceMac.value = blueteethBindController.currentDeviceMac.value =
widget.bleDevice.mac; widget.bleDevice.mac;
blueteethBindController.updateAll(); blueteethBindController.updateAll();
String mac = String mac = await getBindTHMAC(
await getBindTHMAC(context, widget.bleDevice); context, widget.bleDevice, widget.deviceType);
if (mac != null && mac.isNotEmpty) { if (mac != null && mac.isNotEmpty) {
bool flag = bool flag =
await fillTHMac(mac, widget.bleDevice, context); await fillTHMac(mac, widget.bleDevice, context);
@@ -481,19 +483,17 @@ class _DeviceComponentWidgetState extends State<DeviceComponentWidget> {
); );
} }
//获取传感器mac //获取智能床/床垫mac
Future<String> getBindTHMAC( Future<String> getBindTHMAC(
BuildContext context, BlueToothDataModel device) async { BuildContext context, BlueToothDataModel device, Map deviceType) async {
const int maxRetries = 2; const int maxRetries = 2;
const Duration timeout = Duration(seconds: 5); const Duration timeout = Duration(seconds: 5);
String? macAddress; String? macAddress;
try { try {
// 连接设备 // 连接设备
THapp bledevice = THapp(device: device.scanResult.device); THapp bledevice = THapp(device: device.scanResult.device);
await bledevice.connect(); await bledevice.connect();
var res2 = bledevice.isConnected; var res2 = bledevice.isConnected;
if (!res2) { if (!res2) {
edm.EasyDartModule.logger.error("蓝牙连接失败"); edm.EasyDartModule.logger.error("蓝牙连接失败");
DailyLogUtils.printLog("蓝牙连接失败"); DailyLogUtils.printLog("蓝牙连接失败");
@@ -504,58 +504,18 @@ class _DeviceComponentWidgetState extends State<DeviceComponentWidget> {
); );
throw Exception("蓝牙连接失败"); throw Exception("蓝牙连接失败");
} }
blueteethBindController.blueConnectFlag.value = 2; blueteethBindController.blueConnectFlag.value = 2;
blueteethBindController.currentDevice = bledevice; blueteethBindController.currentDevice = bledevice;
await Future.delayed(Duration(seconds: 2)); 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++) { if (deviceType['type'] == 3) {
var completer = Completer<String>(); //智能床垫
macAddress = await getMacFromType3(bledevice, timeout);
StreamSubscription? subscription; } else if (deviceType['type'] == 2) {
subscription = read.characteristic.onValueReceived.listen((onData) { //智能床
if (onData.length >= 14) { macAddress = await getMacFromType2(bledevice, timeout);
// 按照你提供的协议,返回数据长度至少 17字节这里保险起见 14起步 } else {
String parsedMac = parseMacFromBleResponse(onData); throw Exception("不支持的设备类型");
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 (macAddress == null) { if (macAddress == null) {
@@ -629,6 +589,87 @@ class _DeviceComponentWidgetState extends State<DeviceComponentWidget> {
); );
return flag; return flag;
} }
Future<String> 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<String>();
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<String> 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<String>();
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<int> data) { String parseMacFromBleResponse(List<int> data) {
@@ -650,3 +691,21 @@ String parseMacFromBleResponse(List<int> data) {
throw Exception("BLE返回数据格式不正确"); throw Exception("BLE返回数据格式不正确");
} }
} }
String parseMacFromTH2Response(List<int> data) {
if (data.length < 17) {
throw Exception("数据长度不足无法解析MAC");
}
int status = data[8];
if (status != 0x03 && status != 0x04) {
throw Exception("未连接心率带");
}
// 提取9~14字节的MAC地址
List<int> macBytes = data.sublist(9, 15);
return macBytes
.map((b) => b.toRadixString(16).padLeft(2, '0'))
.join(":")
.toUpperCase();
}

View File

@@ -4,11 +4,14 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:vbvs_app/common/color/appFontsize.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/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/main_bottom/global_controller.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/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 { class DeviceInfoWidget extends GetView {
int index; int index;
@@ -200,8 +203,26 @@ class DeviceInfoWidget extends GetView {
width: 150.rpx, width: 150.rpx,
height: 90.rpx, height: 90.rpx,
child: FFButtonWidget( child: FFButtonWidget(
onPressed: () { onPressed: () async {
// deviceControllerChange(device); 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: '控制', text: '控制',
options: FFButtonOptions( options: FFButtonOptions(

View File

@@ -124,7 +124,7 @@ class _MHTBindDeviceTypePageState extends State<MHTBindDeviceTypePage> {
bottom: 26.rpx), // 添加每个设备之间的间隔 bottom: 26.rpx), // 添加每个设备之间的间隔
child: _buildDeviceCard( child: _buildDeviceCard(
context, context,
title: device['name'], // 这里假设 device 是一个 Map title: device['name'],
imageUrl: device['image'], imageUrl: device['image'],
type: device['type'], type: device['type'],
desc: device['desc'] ?? [], desc: device['desc'] ?? [],

View File

@@ -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'; import 'package:vbvs_app/pages/mh_page/device/model/BlueToothDataModel.dart';
class MHTBlueteethDevicePage extends StatefulWidget { class MHTBlueteethDevicePage extends StatefulWidget {
var data; var deviceType;
MHTBlueteethDevicePage({super.key, required this.data}); MHTBlueteethDevicePage({super.key, required this.deviceType});
@override @override
State<MHTBlueteethDevicePage> createState() => _MHTBlueteethDevicePageState(); State<MHTBlueteethDevicePage> createState() => _MHTBlueteethDevicePageState();
@@ -146,10 +146,8 @@ class _MHTBlueteethDevicePageState extends State<MHTBlueteethDevicePage> {
final filteredResults = results.where((r) { final filteredResults = results.where((r) {
final localName = r.advertisementData.localName; final localName = r.advertisementData.localName;
final isTarget = r.rssi > signalThreshold && final isTarget = r.rssi > signalThreshold &&
isTargetDevice(localName, widget.data['reg'].cast<String>()); isTargetDevice(localName, widget.deviceType['reg'].cast<String>());
if (!isTarget) return false; if (!isTarget) return false;
final name = r.advertisementData.advName.toLowerCase(); final name = r.advertisementData.advName.toLowerCase();
String macAddress = r.device.remoteId.str; String macAddress = r.device.remoteId.str;
final mac = macAddress.replaceAll(':', ''); final mac = macAddress.replaceAll(':', '');
@@ -164,14 +162,34 @@ class _MHTBlueteethDevicePageState extends State<MHTBlueteethDevicePage> {
return true; return true;
}).map((r) { }).map((r) {
return BlueToothDataModel.fromScanResult( return BlueToothDataModel.fromScanResult(
r, widget.data['type']?.toInt(), r, widget.deviceType['type']?.toInt(),
bind: false, bind: false,
name: r.advertisementData.localName, name: r.advertisementData.localName,
mac: r.device.remoteId.str.replaceAll(':', '')); mac: r.device.remoteId.str.replaceAll(':', ''));
}).toList(); }).toList();
final currentDevices = mhtBlueToothController.model.blueRawData ?? [];
final newDevices = <BlueToothDataModel>[];
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(() { setState(() {
mhtBlueToothController.model.blueRawData = filteredResults; mhtBlueToothController.model.blueRawData = [
...currentDevices,
...newDevices
];
}); });
}); });
@@ -189,6 +207,7 @@ class _MHTBlueteethDevicePageState extends State<MHTBlueteethDevicePage> {
void _startPeriodicScan() { void _startPeriodicScan() {
_timer = Timer.periodic(Duration(seconds: 10), (timer) { _timer = Timer.periodic(Duration(seconds: 10), (timer) {
if (mhtBlueToothController.shouldScan.value && !isScanning) { if (mhtBlueToothController.shouldScan.value && !isScanning) {
_removeOldDevices(); // 先清理老旧设备
_startScanning(); _startScanning();
} }
}); });
@@ -617,6 +636,7 @@ class _MHTBlueteethDevicePageState extends State<MHTBlueteethDevicePage> {
.map((device) { .map((device) {
return DeviceComponentWidget( return DeviceComponentWidget(
bleDevice: device, bleDevice: device,
deviceType: widget.deviceType,
); );
}) })
.toList() .toList()
@@ -693,4 +713,20 @@ class _MHTBlueteethDevicePageState extends State<MHTBlueteethDevicePage> {
), ),
); );
} }
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;
});
}
}
} }

View File

@@ -39,7 +39,7 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
peopleList.add({ peopleList.add({
'mac': device?.macA, 'mac': device?.macA,
'gender': "", 'gender': "",
'id':device!.macAID, 'id': device!.macAID,
}); });
// Initialize person B if exists // Initialize person B if exists
@@ -47,7 +47,7 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
peopleList.add({ peopleList.add({
'mac': device.macB, 'mac': device.macB,
'gender': "", 'gender': "",
'id':device!.macBID, 'id': device!.macBID,
}); });
} }
@@ -113,7 +113,7 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
? DateFormat('yyyy-MM-dd').format(personData['birthday']) ? DateFormat('yyyy-MM-dd').format(personData['birthday'])
: personData['birthday'], : personData['birthday'],
'contact': personData['contact'], 'contact': personData['contact'],
'id':personData['id'], 'id': personData['id'],
}; };
await requestWithLog( await requestWithLog(
logTitle: "保存用户信息", logTitle: "保存用户信息",
@@ -124,7 +124,8 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
print(res); print(res);
}, },
onFailure: (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); print(res);
}, },
); );
@@ -306,21 +307,7 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
width: double.infinity, width: double.infinity,
height: 90.rpx, height: 90.rpx,
decoration: BoxDecoration(), decoration: BoxDecoration(),
child: Row( child: InkWell(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'性别',
style: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0xFF9EA4B7),
fontSize: 30.rpx,
letterSpacing: 0,
),
),
InkWell(
onTap: () { onTap: () {
FocusScope.of(context) FocusScope.of(context)
.requestFocus(FocusNode()); .requestFocus(FocusNode());
@@ -342,6 +329,20 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
}); });
}, },
child: Row( 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, mainAxisSize: MainAxisSize.max,
children: [ children: [
Container( Container(
@@ -365,10 +366,10 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
), ),
], ],
), ),
),
], ],
), ),
), ),
),
getLine(), getLine(),
Container( Container(
width: double.infinity, width: double.infinity,
@@ -376,6 +377,28 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
margin: EdgeInsets.only( margin: EdgeInsets.only(
left: 40.rpx, right: 35.rpx), left: 40.rpx, right: 35.rpx),
decoration: BoxDecoration(), decoration: BoxDecoration(),
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( child: Row(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: mainAxisAlignment:
@@ -390,29 +413,7 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
letterSpacing: 0, letterSpacing: 0,
), ),
), ),
InkWell( Row(
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(
children: [ children: [
Text( Text(
peopleList[index]['height'] != peopleList[index]['height'] !=
@@ -431,10 +432,10 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
size: 48.rpx), size: 48.rpx),
], ],
), ),
),
], ],
), ),
), ),
),
getLine(), getLine(),
Container( Container(
width: double.infinity, width: double.infinity,
@@ -442,6 +443,25 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
margin: EdgeInsets.only( margin: EdgeInsets.only(
left: 40.rpx, right: 35.rpx), left: 40.rpx, right: 35.rpx),
decoration: BoxDecoration(), decoration: BoxDecoration(),
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( child: Row(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: mainAxisAlignment:
@@ -456,25 +476,7 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
letterSpacing: 0, letterSpacing: 0,
), ),
), ),
InkWell( Row(
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(
children: [ children: [
Text( Text(
peopleList[index]['weight'] != peopleList[index]['weight'] !=
@@ -493,10 +495,10 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
size: 48.rpx), size: 48.rpx),
], ],
), ),
),
], ],
), ),
), ),
),
getLine(), getLine(),
Container( Container(
width: double.infinity, width: double.infinity,
@@ -504,6 +506,29 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
margin: EdgeInsets.only( margin: EdgeInsets.only(
left: 40.rpx, right: 35.rpx), left: 40.rpx, right: 35.rpx),
decoration: BoxDecoration(), decoration: BoxDecoration(),
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;
});
}).then((d) {});
});
},
child: Row( child: Row(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: mainAxisAlignment:
@@ -518,32 +543,7 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
letterSpacing: 0, letterSpacing: 0,
), ),
), ),
InkWell( Row(
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: Row(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: [ children: [
Container( Container(
@@ -574,10 +574,10 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
), ),
], ],
), ),
),
], ],
), ),
), ),
),
getLine(), getLine(),
Container( Container(
width: double.infinity, width: double.infinity,

View File

@@ -1,7 +1,7 @@
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
class BlueToothDataModel { class BlueToothDataModel {
String name;//设备型号 String name; // 设备型号
bool bind; bool bind;
String mac; String mac;
ScanResult scanResult; ScanResult scanResult;
@@ -10,6 +10,7 @@ class BlueToothDataModel {
int type; int type;
String? macAID; String? macAID;
String? macBID; String? macBID;
DateTime lastSeen; // 添加的最后可见时间字段
BlueToothDataModel({ BlueToothDataModel({
this.name = '', this.name = '',
@@ -19,6 +20,7 @@ class BlueToothDataModel {
required this.type, required this.type,
this.macA = '', this.macA = '',
this.macB = '', this.macB = '',
required this.lastSeen, // 添加到构造函数参数
}); });
factory BlueToothDataModel.fromScanResult(ScanResult result, int type, factory BlueToothDataModel.fromScanResult(ScanResult result, int type,
@@ -28,6 +30,14 @@ class BlueToothDataModel {
name.isNotEmpty ? name : (result.advertisementData.localName ?? ''); name.isNotEmpty ? name : (result.advertisementData.localName ?? '');
return BlueToothDataModel( 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(), // 设置为当前时间
);
} }
} }

View File

@@ -86,7 +86,7 @@ class _HomeDeviceStausWidgetState extends State<HomeDeviceStausWidget> {
}); });
await future; await future;
await webviewTestController.web.jsbridge?.dart await webviewTestController.web.jsbridge?.dart
.pageActive(); .pageActive(false);
MainPageBBottomChange.jumpTo(2); MainPageBBottomChange.jumpTo(2);
} catch (e) { } catch (e) {
DailyLogUtils.writeError("发生异常: $e"); DailyLogUtils.writeError("发生异常: $e");

View File

@@ -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/color/app_uri_status.dart';
import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.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/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/user_info_controller.dart'; import 'package:vbvs_app/controller/user_info_controller.dart';
import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart'; import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart';
@@ -38,11 +39,11 @@ class _MhtSleepReportPageState extends State<MhtSleepReportPage> {
deviceController.getDeviceList(group: 'room').then((apiResponse) { deviceController.getDeviceList(group: 'room').then((apiResponse) {
if (apiResponse.code != HttpStatusCodes.ok) { if (apiResponse.code != HttpStatusCodes.ok) {
if (context.mounted) { if (context.mounted) {
TopSlideNotification.show( // TopSlideNotification.show(
context, // context,
text: apiResponse.msg!, // text: apiResponse.msg!,
textColor: themeController.currentColor.sc9, // textColor: themeController.currentColor.sc9,
); // );
} }
} else { } else {
//请求睡眠报告 //请求睡眠报告
@@ -257,6 +258,9 @@ class _MhtSleepReportPageState extends State<MhtSleepReportPage> {
), ),
); );
} }
if (userInfoController.model.login != null &&
userInfoController.model.login == 1)
return Expanded(child: NullDataWidget());
return Container(); return Container();
}), }),
@@ -273,7 +277,7 @@ class _MhtSleepReportPageState extends State<MhtSleepReportPage> {
'backgroundImg': 'backgroundImg':
'assets/images/new_background.png', 'assets/images/new_background.png',
'arrow': false, 'arrow': false,
'noBackImg':true, 'noBackImg': true,
}, },
), ),
); );

View File

@@ -45,20 +45,20 @@ class _NewHomePageState extends State<NewHomePage> {
// homeController.getSleepReport(); // homeController.getSleepReport();
deviceController.getDeviceNum().then((apiResponse) { deviceController.getDeviceNum().then((apiResponse) {
if (apiResponse.code != HttpStatusCodes.ok) { if (apiResponse.code != HttpStatusCodes.ok) {
TopSlideNotification.show( // TopSlideNotification.show(
Get.context!, // Get.context!,
text: apiResponse.msg!, // text: apiResponse.msg!,
textColor: themeController.currentColor.sc9, // textColor: themeController.currentColor.sc9,
); // );
} }
}); });
deviceController.getDeviceList(group: 'room').then((apiResponse) { deviceController.getDeviceList(group: 'room').then((apiResponse) {
if (apiResponse.code != HttpStatusCodes.ok) { if (apiResponse.code != HttpStatusCodes.ok) {
TopSlideNotification.show( // TopSlideNotification.show(
Get.context!, // Get.context!,
text: apiResponse.msg!, // text: apiResponse.msg!,
textColor: themeController.currentColor.sc9, // textColor: themeController.currentColor.sc9,
); // );
} else { } else {
//请求睡眠报告 //请求睡眠报告
// deviceController.getSleepReport(); // deviceController.getSleepReport();
@@ -105,11 +105,11 @@ class _NewHomePageState extends State<NewHomePage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
deviceController.getDeviceList(group: 'room').then((apiResponse) { deviceController.getDeviceList(group: 'room').then((apiResponse) {
if (apiResponse.code != HttpStatusCodes.ok) { if (apiResponse.code != HttpStatusCodes.ok) {
TopSlideNotification.show( // TopSlideNotification.show(
context, // context,
text: apiResponse.msg!, // text: apiResponse.msg!,
textColor: themeController.currentColor.sc9, // textColor: themeController.currentColor.sc9,
); // );
} else { } else {
//请求睡眠报告 //请求睡眠报告
// deviceController.getSleepReport(); // deviceController.getSleepReport();
@@ -121,21 +121,21 @@ class _NewHomePageState extends State<NewHomePage> {
//请求绑定设备列表 //请求绑定设备列表
// homeController.getSleepReport(); // homeController.getSleepReport();
deviceController.getDeviceNum().then((apiResponse) { deviceController.getDeviceNum().then((apiResponse) {
if (apiResponse.code != HttpStatusCodes.ok) { // if (apiResponse.code != HttpStatusCodes.ok) {
TopSlideNotification.show( // TopSlideNotification.show(
Get.context!, // Get.context!,
text: apiResponse.msg!, // text: apiResponse.msg!,
textColor: themeController.currentColor.sc9, // textColor: themeController.currentColor.sc9,
); // );
} // }
}); });
deviceController.getDeviceList(group: 'room').then((apiResponse) { deviceController.getDeviceList(group: 'room').then((apiResponse) {
if (apiResponse.code != HttpStatusCodes.ok) { if (apiResponse.code != HttpStatusCodes.ok) {
TopSlideNotification.show( // TopSlideNotification.show(
Get.context!, // Get.context!,
text: apiResponse.msg!, // text: apiResponse.msg!,
textColor: themeController.currentColor.sc9, // textColor: themeController.currentColor.sc9,
); // );
} else { } else {
//请求睡眠报告 //请求睡眠报告
// deviceController.getSleepReport(); // deviceController.getSleepReport();

View File

@@ -310,7 +310,7 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
decoration: BoxDecoration(), decoration: BoxDecoration(),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
// 触摸收起键盘 // 延迟执行的代码
FocusScope.of(context) FocusScope.of(context)
.requestFocus( .requestFocus(
FocusNode()); FocusNode());
@@ -318,7 +318,6 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
const Duration( const Duration(
milliseconds: milliseconds:
250), () { 250), () {
// 延迟执行的代码
showOneSelectionDialog( showOneSelectionDialog(
context, context,
arr: ["", ""], arr: ["", ""],
@@ -338,12 +337,6 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
sindex; // 👈 保存为 0 / 1 sindex; // 👈 保存为 0 / 1
controller controller
.updateAll(); .updateAll();
print(
"gender $sindex");
}).then((d) {
// Timer(Duration.zero, () {
// FocusScope.of(context).unfocus();
// });
}); });
}); });
}, },
@@ -409,77 +402,6 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
)), )),
), ),
getLine(), 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( Container(
width: double.infinity, width: double.infinity,
height: 90.rpx, height: 90.rpx,
@@ -489,12 +411,6 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
decoration: BoxDecoration(), decoration: BoxDecoration(),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
FocusScope.of(context)
.unfocus();
Future.delayed(
const Duration(
milliseconds: 250),
() {
// Convert string height to int for initial value // Convert string height to int for initial value
final currentHeight = final currentHeight =
controller.model controller.model
@@ -508,6 +424,13 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
170 170
: 170; : 170;
FocusScope.of(context)
.requestFocus(
FocusNode());
Future.delayed(
const Duration(
milliseconds: 250),
() {
showHeightPickerDialog( showHeightPickerDialog(
context, context,
initialHeight: initialHeight:
@@ -591,7 +514,8 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
child: InkWell( child: InkWell(
onTap: () { onTap: () {
FocusScope.of(context) FocusScope.of(context)
.unfocus(); .requestFocus(
FocusNode());
Future.delayed( Future.delayed(
const Duration( const Duration(
milliseconds: milliseconds:
@@ -674,7 +598,6 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
), ),
)), )),
), ),
getLine(), getLine(),
Obx( Obx(
() => Container( () => Container(
@@ -686,7 +609,7 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
decoration: BoxDecoration(), decoration: BoxDecoration(),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
// 触摸收起键盘 // 延迟执行的代码
FocusScope.of(context) FocusScope.of(context)
.requestFocus( .requestFocus(
FocusNode()); FocusNode());
@@ -694,7 +617,6 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
const Duration( const Duration(
milliseconds: milliseconds:
250), () { 250), () {
// 延迟执行的代码
showDateSelectionDialog( showDateSelectionDialog(
context, context,
checkDate: controller checkDate: controller
@@ -718,10 +640,6 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
controller controller
.updateAll(); .updateAll();
print("$d"); print("$d");
}).then((d) {
// Timer(Duration.zero, () {
// FocusScope.of(context).unfocus();
// });
}); });
}); });
}, },

View File

@@ -71,7 +71,6 @@ class _PrivacyPolicyPageState extends State<PrivacyPolicyPage> {
fontSize: 30.rpx, fontSize: 30.rpx,
), ),
), ),
/// 左边返回按钮 /// 左边返回按钮
Positioned( Positioned(
left: 0, left: 0,

View File

@@ -32,10 +32,17 @@ class WebviewTestController extends GetControllerEx<WebviewTestModel> {
WebviewTestController() : super(WebviewTestModel()) { WebviewTestController() : super(WebviewTestModel()) {
web = WebviewHelper( web = WebviewHelper(
jsbridge: buildsdk( jsbridge: buildsdk(
<<<<<<< HEAD
// father: this, // father: this,
// clientId: '494641114', // clientId: '494641114',
// dbgserverUrl: 'ws://192.168.1.2:9001', // dbgserverUrl: 'ws://192.168.1.2:9001',
), ),
=======
father: this,
clientId: '494641114',
// dbgserverUrl: 'ws://192.168.1.2:9001',
),
>>>>>>> 58b2bebe936bdd7239529662ef20b531f2143de4
settings: buildsettings(), settings: buildsettings(),
params: PlatformHeadlessInAppWebViewCreationParams( params: PlatformHeadlessInAppWebViewCreationParams(
initialUrlRequest: URLRequest( initialUrlRequest: URLRequest(
@@ -90,6 +97,7 @@ class WebviewTestController extends GetControllerEx<WebviewTestModel> {
ef.log('updateBlueToothStatus: $args'); ef.log('updateBlueToothStatus: $args');
// bluetooth = args[0]; // bluetooth = args[0];
MHTHomeController deviceController = Get.find(); MHTHomeController deviceController = Get.find();
await deviceController.getDeviceList(group: 'room');
final allDevices = deviceController.deviceList.values final allDevices = deviceController.deviceList.values
.expand((list) => list) .expand((list) => list)
.toList(); .toList();
@@ -113,11 +121,6 @@ class WebviewTestController extends GetControllerEx<WebviewTestModel> {
// bluetooth = args[0]; // bluetooth = args[0];
return instantData; return instantData;
}); });
bridge.sdk.queryInstantData((args) async {
ef.log('queryInstantData: $args');
// bluetooth = args[0];
return instantData;
});
bridge.sdk.startTimer((args) async { bridge.sdk.startTimer((args) async {
ef.log('queryInstantData: $args'); ef.log('queryInstantData: $args');
MHTHomeController homeController = Get.find(); MHTHomeController homeController = Get.find();

View File

@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.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/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart';

View File

@@ -148,13 +148,16 @@ class _HeartChangeWidgetState extends State<HeartChangeWidget> {
alignment: MainAxisAlignment.center, alignment: MainAxisAlignment.center,
widget1: Row( widget1: Row(
children: [ children: [
Text( Expanded(
child: Text(
'${data['name']}', '${data['name']}',
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
color: themeController.currentColor.sc3, color: themeController.currentColor.sc3,
fontSize: AppConstants().normal_text_fontSize, fontSize:
AppConstants().normal_text_fontSize,
),
), ),
), ),
ClickableContainer( ClickableContainer(

View File

@@ -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/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/common/util/requestWithLog.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/ClickableContainer.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/date/CalendarController.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/controller/sleep/sleep_report_controller.dart';
import 'package:vbvs_app/language/AppLanguage.dart'; import 'package:vbvs_app/language/AppLanguage.dart';
import 'package:vbvs_app/pages/common/selectDialog.dart'; import 'package:vbvs_app/pages/common/selectDialog.dart';
@@ -147,8 +147,15 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
_scrollToTargetComponent(sleepReportController.sleepReport); _scrollToTargetComponent(sleepReportController.sleepReport);
}, },
onFailure: (res) { onFailure: (res) {
if (MainPageBBottomChange.getCurrentIndex() != null) {
if (MainPageBBottomChange.getCurrentIndex() == 1) {
TopSlideNotification.show(context, TopSlideNotification.show(context,
text: res.msg!, textColor: themeController.currentColor.sc9); text: res.msg!, textColor: themeController.currentColor.sc9);
}
} else {
TopSlideNotification.show(context,
text: res.msg!, textColor: themeController.currentColor.sc9);
}
sleepReportController.sleepReport.value = {}; sleepReportController.sleepReport.value = {};
sleepReportController.updateAll(); sleepReportController.updateAll();
print(res); print(res);
@@ -609,6 +616,12 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
), ),
), ),
), ),
if (sleepReport.value == null ||
sleepReport.value.isEmpty)
Container(
height: 500.rpx,
child: NullDataWidget(),
),
Padding( Padding(
padding: EdgeInsetsDirectional.fromSTEB( padding: EdgeInsetsDirectional.fromSTEB(
30.rpx, 0.rpx, 30.rpx, 0), 30.rpx, 0.rpx, 30.rpx, 0),
@@ -851,8 +864,16 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
sleepReportController.updateAll(); sleepReportController.updateAll();
}, },
onFailure: (res) { onFailure: (res) {
if (MainPageBBottomChange.getCurrentIndex() != null) {
if (MainPageBBottomChange.getCurrentIndex() == 1) {
TopSlideNotification.show(context,
text: res.msg!,
textColor: themeController.currentColor.sc9);
}
} else {
TopSlideNotification.show(context, TopSlideNotification.show(context,
text: res.msg!, textColor: themeController.currentColor.sc9); text: res.msg!, textColor: themeController.currentColor.sc9);
}
sleepReportController.sleepReport.value = {}; sleepReportController.sleepReport.value = {};
sleepReportController.updateAll(); sleepReportController.updateAll();
print(res); print(res);
@@ -890,8 +911,16 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
sleepReportController.updateAll(); sleepReportController.updateAll();
}, },
onFailure: (res) { onFailure: (res) {
if (MainPageBBottomChange.getCurrentIndex() != null) {
if (MainPageBBottomChange.getCurrentIndex() == 1) {
TopSlideNotification.show(context,
text: res.msg!,
textColor: themeController.currentColor.sc9);
}
} else {
TopSlideNotification.show(context, TopSlideNotification.show(context,
text: res.msg!, textColor: themeController.currentColor.sc9); text: res.msg!, textColor: themeController.currentColor.sc9);
}
sleepReportController.sleepReport.value = {}; sleepReportController.sleepReport.value = {};
sleepReportController.updateAll(); sleepReportController.updateAll();
print(res); print(res);
@@ -974,9 +1003,17 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
sleepReportController.updateAll(); sleepReportController.updateAll();
}, },
onFailure: (res) { onFailure: (res) {
if (MainPageBBottomChange.getCurrentIndex() != null) {
if (MainPageBBottomChange.getCurrentIndex() == 1) {
TopSlideNotification.show(context, TopSlideNotification.show(context,
text: res.msg!, text: res.msg!,
textColor: themeController.currentColor.sc9); textColor: themeController.currentColor.sc9);
}
} else {
TopSlideNotification.show(context,
text: res.msg!,
textColor: themeController.currentColor.sc9);
}
sleepReportController.sleepReport.value = {}; sleepReportController.sleepReport.value = {};
sleepReportController.updateAll(); sleepReportController.updateAll();
print(res); print(res);

View File

@@ -94,7 +94,7 @@ var mhroutes = {
"/deviceListPage": (context) => DeviceListPage(), "/deviceListPage": (context) => DeviceListPage(),
"/mHTDeviceTypePage": (context, {arguments}) => MHTBindDeviceTypePage(), "/mHTDeviceTypePage": (context, {arguments}) => MHTBindDeviceTypePage(),
"/mHTBlueteethDevicePage": (context, {arguments}) => "/mHTBlueteethDevicePage": (context, {arguments}) =>
MHTBlueteethDevicePage(data: arguments), MHTBlueteethDevicePage(deviceType: arguments),
"/mHTwifiPage": (contxt, {arguments}) => MHTWifiPage(deviceInfo: arguments), "/mHTwifiPage": (contxt, {arguments}) => MHTWifiPage(deviceInfo: arguments),
"/calibrationPage": (contxt) => MHTCalibrationPage(), "/calibrationPage": (contxt) => MHTCalibrationPage(),
"/bindDeviceSuccess": (contxt) => MHTBindDeviceSuccess(), "/bindDeviceSuccess": (contxt) => MHTBindDeviceSuccess(),

View File

@@ -65,7 +65,7 @@ dependencies:
easyweb: easyweb:
git: git:
url: https://gitea.wslpc.real.he-info.cn:94/flutter/easyweb.git url: https://gitea.wslpc.real.he-info.cn:94/flutter/easyweb.git
ref: e86d515f77 ref: main
archive: ^4.0.0 archive: ^4.0.0