diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcherhs.png b/android/app/src/main/res/mipmap-hdpi/ic_launcherhs.png
new file mode 100644
index 0000000..2e93dee
Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcherhs.png differ
diff --git a/android/app/src/main/res/mipmap-ldpi/ic_launcherhs.png b/android/app/src/main/res/mipmap-ldpi/ic_launcherhs.png
new file mode 100644
index 0000000..2e93dee
Binary files /dev/null and b/android/app/src/main/res/mipmap-ldpi/ic_launcherhs.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcherhs.png b/android/app/src/main/res/mipmap-mdpi/ic_launcherhs.png
new file mode 100644
index 0000000..2e93dee
Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcherhs.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcherhs.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcherhs.png
new file mode 100644
index 0000000..2e93dee
Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcherhs.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcherhs.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcherhs.png
new file mode 100644
index 0000000..2e93dee
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcherhs.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcherhs.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcherhs.png
new file mode 100644
index 0000000..2e93dee
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcherhs.png differ
diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts
deleted file mode 100644
index a439442..0000000
--- a/android/settings.gradle.kts
+++ /dev/null
@@ -1,25 +0,0 @@
-pluginManagement {
- val flutterSdkPath = run {
- val properties = java.util.Properties()
- file("local.properties").inputStream().use { properties.load(it) }
- val flutterSdkPath = properties.getProperty("flutter.sdk")
- require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
- flutterSdkPath
- }
-
- includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
-
- repositories {
- google()
- mavenCentral()
- gradlePluginPortal()
- }
-}
-
-plugins {
- id("dev.flutter.flutter-plugin-loader") version "1.0.0"
- id("com.android.application") version "8.7.0" apply false
- id("org.jetbrains.kotlin.android") version "1.8.22" apply false
-}
-
-include(":app")
diff --git a/assets/img/icon/arrow_right.svg b/assets/img/icon/arrow_right.svg
index 2fa5397..db9e15e 100644
--- a/assets/img/icon/arrow_right.svg
+++ b/assets/img/icon/arrow_right.svg
@@ -1 +1,9 @@
-
\ No newline at end of file
+
diff --git a/assets/img/icon/arrow_right1.svg b/assets/img/icon/arrow_right1.svg
new file mode 100644
index 0000000..2fa5397
--- /dev/null
+++ b/assets/img/icon/arrow_right1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lib/component/home_page/DynamicReportDetailWidget.dart b/lib/component/home_page/DynamicReportDetailWidget.dart
index bfd516a..bed3f1a 100644
--- a/lib/component/home_page/DynamicReportDetailWidget.dart
+++ b/lib/component/home_page/DynamicReportDetailWidget.dart
@@ -57,7 +57,7 @@ class _DynamicReportDetailWidgetState extends State {
@override
Widget build(BuildContext context) {
return Padding(
- padding: EdgeInsetsDirectional.fromSTEB(0, 25.rpx, 0, 25.rpx),
+ padding: EdgeInsetsDirectional.fromSTEB(0, 0.rpx, 0, 0.rpx),
child: Container(
width: double.infinity,
decoration: BoxDecoration(
@@ -119,9 +119,19 @@ class _DynamicReportDetailWidgetState extends State {
DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
int.parse(selectedWidgets[0].time!));
String time = MyUtils.formatBindTime(dateTime);
- String sleepReportUrl =
- "${ServiceConstant.sleep_report_url}?mac=$mac&token=${ServiceConstant.sleep_token}&date=$time";
- Get.toNamed("/sleepReportPage", arguments: sleepReportUrl);
+ // String sleepReportUrl =
+ // "${ServiceConstant.sleep_report_url}?mac=$mac&token=${ServiceConstant.sleep_token}&date=$time";
+ // Get.toNamed("/sleepReportPage", arguments: sleepReportUrl);
+ Get.toNamed("/newSleepReportPage", arguments: {
+ 'date': dateTime != null
+ ? dateTime.millisecondsSinceEpoch
+ : DateTime.now().millisecondsSinceEpoch,
+ "mac": mac,
+ 'type': 1,
+ 'name': 'sleep', //'sleep', 'heartRate' 或 'breathe'
+ // 'itemName': widget.data['id'],
+ 'person': widget.targetDevice['person'],
+ });
} else {
TopSlideNotification.show(context,
text: "当前暂无数据".tr,
diff --git a/lib/component/home_page/SleepDateWidget.dart b/lib/component/home_page/SleepDateWidget.dart
index 95ff7b5..1cbbc67 100644
--- a/lib/component/home_page/SleepDateWidget.dart
+++ b/lib/component/home_page/SleepDateWidget.dart
@@ -117,7 +117,7 @@ class _SleepDateWidgetState extends State {
letterSpacing: 0.0,
color: widget.textColor ??
themeController.currentColor.sc4,
- fontWeight: FontWeight.bold, // 加粗
+ fontWeight: FontWeight.w500, // 加粗
),
),
if ((widget.score?.trim().isNotEmpty ?? false))
@@ -158,7 +158,7 @@ class _SleepDateWidgetState extends State {
iconPadding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 0),
color: widget.textColor ?? themeController.currentColor.sc4,
textStyle: TextStyle(
- fontFamily: 'Inter Tight',
+ // fontFamily: 'Inter Tight',
color: themeController.currentColor.sc3,
letterSpacing: 0.0,
),
diff --git a/lib/controller/login/login_controller.dart b/lib/controller/login/login_controller.dart
index 0e8cdee..660c6a6 100644
--- a/lib/controller/login/login_controller.dart
+++ b/lib/controller/login/login_controller.dart
@@ -6,6 +6,7 @@ import 'package:fluwx/fluwx.dart';
import 'package:get_storage/get_storage.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:vbvs_app/common/color/ServiceConstant.dart';
+import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/color/app_uri_status.dart';
import 'package:vbvs_app/common/util/CommonVariables.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
@@ -13,6 +14,8 @@ import 'package:vbvs_app/common/util/requestWithLog.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/time/countdown_controller.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
+import 'package:vbvs_app/enum/APPPackageType.dart';
+import 'package:vbvs_app/main.dart';
import 'package:vbvs_app/model/api_response.dart';
import 'package:vbvs_app/model/user_data.dart';
@@ -139,6 +142,7 @@ class LoginController extends GetControllerEx {
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
+
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
@@ -149,6 +153,9 @@ class LoginController extends GetControllerEx {
var data = {
"userName": model.phone,
};
+ if (AppConstants().ent_type == APPPackageType.HUANSHUI.code) {
+ data['code'] = "hzhskj";
+ }
var response =
await EasyDartModule.dio.post(queryUrl, data: jsonEncode(data));
if (response != null) {
@@ -203,7 +210,7 @@ class LoginController extends GetControllerEx {
EasyDartModule.logger.error('msg:$data');
if (data) {
//登陆成功
- // await dealBindProcess();
+ await dealBindProcess();
}
});
} catch (e) {
diff --git a/lib/main.dart b/lib/main.dart
index e9cecc8..f3a848c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -398,6 +398,7 @@ class MyApp extends StatelessWidget {
// Get.lazyPut(() => UserInfoController()),
Get.put(GlobalController()),
Get.put(WeatherModelController()),
+ Get.lazyPut(() => ApplyRepairController()),
Get.lazyPut(() => MainPageController()),
Get.lazyPut(() => BlueteethBindController()),
Get.lazyPut(() => PersonController()),
diff --git a/lib/pages/device/instant_body_page.dart b/lib/pages/device/instant_body_page.dart
index d45480f..d4f0763 100644
--- a/lib/pages/device/instant_body_page.dart
+++ b/lib/pages/device/instant_body_page.dart
@@ -125,9 +125,10 @@ class _InstantBodyPageState extends State
// 心率 呼吸 体动 呼吸暂停
if ("离床" == inBed) {
breathState = "否";
- data["breathRate"] = 0;
- data["heartRate"] = 0;
- data["bodyMotion"] = 0;
+ bodyMotion = 0;
+ breathrate = 0;
+ heartrate = 0;
+ snores = "否";
} else {
breathState = data["breathState"];
bodyMotion = data['bodyMotion'];
diff --git a/lib/pages/device_bind/blueteeth_device_page.dart b/lib/pages/device_bind/blueteeth_device_page.dart
index 12a04df..0dd834f 100644
--- a/lib/pages/device_bind/blueteeth_device_page.dart
+++ b/lib/pages/device_bind/blueteeth_device_page.dart
@@ -360,7 +360,8 @@ class _BlueteethDevicePageState extends State {
'最小信号强度'.tr,
style: TextStyle(
fontFamily: 'Inter',
- color: stringToColor("#003058"),
+ // color: stringToColor("#003058"),
+ color: Colors.white,
fontSize: 26.rpx,
letterSpacing: 0.0,
),
diff --git a/lib/pages/login/other_login.dart b/lib/pages/login/other_login.dart
index 34629ac..5dfa408 100644
--- a/lib/pages/login/other_login.dart
+++ b/lib/pages/login/other_login.dart
@@ -1,7 +1,6 @@
import 'package:EasyDartModule/EasyDartModule.dart' as edm;
import 'package:ef/ef.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_svg/svg.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:fluwx/fluwx.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
@@ -19,7 +18,6 @@ import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
import 'package:vbvs_app/controller/time/countdown_controller.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
-import 'package:vbvs_app/main.dart';
import 'package:vbvs_app/model/api_response.dart';
class OtherLoginPage extends StatefulWidget {
@@ -68,7 +66,10 @@ class _OtherLoginPageState extends State {
//首次未注册的用户引导去手机号填写页面
//已注册的用户直接跳转首页
if (CommonVariables.isNetWorkOn == false) {
- showToast("网络未连接,请开启设备网络后重试");
+ TopSlideNotification.show(context,
+ text: "网络未连接,请开启设备网络后重试".tr,
+ textColor: themeController.currentColor.sc9);
+ // showToast("网络未连接,请开启设备网络后重试");
return;
}
ApiResponse msg = await loginController.loginByWechatCode(code);
@@ -82,9 +83,13 @@ class _OtherLoginPageState extends State {
// TODO 操作全部跳转页面前成功以后移除监听,防止重复监听,其他方式登录成功也需要移出监听
// fluwxCancelable?.cancel();
} else if (errCode == -4) {
- showToast("用户拒绝授权");
+ TopSlideNotification.show(context,
+ text: "用户拒绝授权".tr, textColor: themeController.currentColor.sc9);
+ // showToast("用户拒绝授权");
} else if (errCode == -2) {
- showToast("用户取消授权");
+ TopSlideNotification.show(context,
+ text: "用户取消授权".tr, textColor: themeController.currentColor.sc9);
+ // showToast("用户取消授权");
}
}
});
@@ -127,13 +132,14 @@ class _OtherLoginPageState extends State {
},
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
- 16.rpx, 10.rpx, 16.rpx, 10.rpx),
- child: SvgPicture.asset(
- 'assets/img/icon/arrow_left.svg',
- width: 25.rpx,
- height: 25.rpx, // 如果 SVG 中没有固定颜色,使用 color 设置
- color: themeController.currentColor.sc3,
- ),
+ 0.rpx, 10.rpx, 16.rpx, 10.rpx),
+ // child: SvgPicture.asset(
+ // 'assets/img/icon/arrow_left.svg',
+ // width: 25.rpx,
+ // height: 25.rpx, // 如果 SVG 中没有固定颜色,使用 color 设置
+ // color: themeController.currentColor.sc3,
+ // ),
+ child: returnIconButtomNew,
),
),
Expanded(
@@ -152,7 +158,9 @@ class _OtherLoginPageState extends State {
child: Align(
alignment: AlignmentDirectional(0, 0),
child: Text(
- AppConstants().ent_type == 1?'登录页.欢迎使用太和e护'.tr:"欢迎使用欢睡科技",
+ AppConstants().ent_type == 1
+ ? '登录页.欢迎使用太和e护'.tr
+ : "欢迎使用欢睡科技",
style: TextStyle(
fontFamily: 'Inter',
fontSize: 48.rpx,
@@ -281,8 +289,7 @@ class _OtherLoginPageState extends State {
focusedErrorBorder:
OutlineInputBorder(
borderSide: BorderSide(
- color:
- Colors.red,
+ color: Colors.red,
width: 1.rpx,
),
borderRadius:
@@ -314,7 +321,6 @@ class _OtherLoginPageState extends State {
),
),
),
-
Align(
alignment: AlignmentDirectional(-1, 0),
child: Padding(
@@ -408,8 +414,7 @@ class _OtherLoginPageState extends State {
focusedErrorBorder:
OutlineInputBorder(
borderSide: BorderSide(
- color:
- Colors.red,
+ color: Colors.red,
width: 1.rpx,
),
borderRadius:
@@ -698,8 +703,7 @@ class _OtherLoginPageState extends State {
),
activeColor:
stringToColor("#FF9F66"), //固定
- checkColor:
- Colors.white,
+ checkColor: Colors.white,
),
)),
Expanded(
@@ -804,7 +808,9 @@ class _OtherLoginPageState extends State {
padding: EdgeInsetsDirectional.fromSTEB(
0, 0, 0, 36.rpx),
child: Text(
- '登录页.其他登录方式'.tr,
+ AppConstants().ent_type == 1
+ ? '登录页.欢迎使用太和e护'.tr
+ : "欢迎使用欢睡科技",
style: TextStyle(
fontFamily: 'Inter',
fontSize: 26.rpx,
diff --git a/lib/pages/main_bottom/home_page.dart b/lib/pages/main_bottom/home_page.dart
index cae727c..ba03f20 100644
--- a/lib/pages/main_bottom/home_page.dart
+++ b/lib/pages/main_bottom/home_page.dart
@@ -994,12 +994,89 @@ class _HomePageState extends State {
);
}
+ // return Expanded(
+ // child: SingleChildScrollView(
+ // child: Column(
+ // children: List.generate(
+ // deviceList.length,
+ // (i) {
+ // String mac = macList[i];
+ // List dailyDataList =
+ // reportData[mac]!;
+ // Map? targetDevice =
+ // deviceList.firstWhereOrNull(
+ // (device) => device['mac'] == mac,
+ // );
+ // List stateModule = [];
+ // String currentTime = "";
+ // String goalMac = targetDevice?['mac'];
+ // var person = targetDevice?['person'];
+ // return DynamicReportDetailWidget(
+ // key: ValueKey(
+ // '${targetDevice!['mac']}_${homeController.model.type}'), // 添加唯一key
+ // targetDevice: targetDevice!,
+ // sleepDateWidgets: List.generate(
+ // dailyDataList.length,
+ // (j) {
+ // var dayData = dailyDataList[j];
+ // DateTime date =
+ // DateTime.fromMillisecondsSinceEpoch(
+ // dayData['time'] is String
+ // ? int.parse(dayData['time'])
+ // : dayData['time'],
+ // );
+ // if (dayData['selected'] != null &&
+ // dayData['selected'] == true &&
+ // dayData['state'] != null) {
+ // stateModule = dayData['state'];
+ // currentTime = dayData['time'];
+ // }
+ // return SleepDateWidget(
+ // mac: mac,
+ // time: dayData['time'],
+ // date: date,
+ // score: dayData['score']?['socre']
+ // ?.toString() ??
+ // '',
+ // comment: dayData['score']?['name'],
+ // textColor: dayData['score']
+ // ?['color'] ==
+ // null
+ // ? null
+ // : stringToColor(
+ // dayData['score']?['color']),
+ // isSelected: dayData['selected'],
+ // );
+ // },
+ // ),
+ // sleepDataModuleWidgets: stateModule
+ // .isNotEmpty
+ // ? List.generate(
+ // stateModule.length,
+ // (j) {
+ // stateModule[j]['onto'] = true;
+ // stateModule[j]['time'] =
+ // currentTime;
+ // stateModule[j]['mac'] = goalMac;
+ // stateModule[j]['person'] = person;
+ // return SleepDataModuleWidget(
+ // data: stateModule[j],
+ // );
+ // },
+ // )
+ // : [],
+ // );
+ // },
+ // ),
+ // ),
+ // ),
+ // );
return Expanded(
child: SingleChildScrollView(
child: Column(
- children: List.generate(
- deviceList.length,
- (i) {
+ children: [
+ SizedBox(height: 26.rpx), // 第一个上方间距
+ ...List.generate(deviceList.length, (i) {
String mac = macList[i];
List dailyDataList =
reportData[mac]!;
@@ -1011,63 +1088,66 @@ class _HomePageState extends State {
String currentTime = "";
String goalMac = targetDevice?['mac'];
var person = targetDevice?['person'];
- return DynamicReportDetailWidget(
- key: ValueKey(
- '${targetDevice!['mac']}_${homeController.model.type}'), // 添加唯一key
- targetDevice: targetDevice!,
- sleepDateWidgets: List.generate(
- dailyDataList.length,
- (j) {
- var dayData = dailyDataList[j];
- DateTime date =
- DateTime.fromMillisecondsSinceEpoch(
- dayData['time'] is String
- ? int.parse(dayData['time'])
- : dayData['time'],
- );
- if (dayData['selected'] != null &&
- dayData['selected'] == true &&
- dayData['state'] != null) {
- stateModule = dayData['state'];
- currentTime = dayData['time'];
- }
- return SleepDateWidget(
- mac: mac,
- time: dayData['time'],
- date: date,
- score: dayData['score']?['socre']
- ?.toString() ??
- '',
- comment: dayData['score']?['name'],
- textColor: dayData['score']
- ?['color'] ==
- null
- ? null
- : stringToColor(
- dayData['score']?['color']),
- isSelected: dayData['selected'],
- );
- },
- ),
- sleepDataModuleWidgets: stateModule
- .isNotEmpty
- ? List.generate(
- stateModule.length,
- (j) {
- stateModule[j]['onto'] = true;
- stateModule[j]['time'] =
- currentTime;
- stateModule[j]['mac'] = goalMac;
- stateModule[j]['person'] = person;
- return SleepDataModuleWidget(
- data: stateModule[j],
- );
- },
- )
- : [],
+
+ return Column(
+ children: [
+ DynamicReportDetailWidget(
+ key: ValueKey(
+ '${targetDevice!['mac']}_${homeController.model.type}'),
+ targetDevice: targetDevice!,
+ sleepDateWidgets: List.generate(
+ dailyDataList.length, (j) {
+ var dayData = dailyDataList[j];
+ DateTime date = DateTime
+ .fromMillisecondsSinceEpoch(
+ dayData['time'] is String
+ ? int.parse(dayData['time'])
+ : dayData['time'],
+ );
+ if (dayData['selected'] == true &&
+ dayData['state'] != null) {
+ stateModule = dayData['state'];
+ currentTime = dayData['time'];
+ }
+ return SleepDateWidget(
+ mac: mac,
+ time: dayData['time'],
+ date: date,
+ score: dayData['score']?['socre']
+ ?.toString() ??
+ '',
+ comment: dayData['score']?['name'],
+ textColor: dayData['score']
+ ?['color'] ==
+ null
+ ? null
+ : stringToColor(
+ dayData['score']?['color']),
+ isSelected: dayData['selected'],
+ );
+ }),
+ sleepDataModuleWidgets: stateModule
+ .isNotEmpty
+ ? List.generate(stateModule.length,
+ (j) {
+ stateModule[j]['onto'] = true;
+ stateModule[j]['time'] =
+ currentTime;
+ stateModule[j]['mac'] = goalMac;
+ stateModule[j]['person'] =
+ person;
+ return SleepDataModuleWidget(
+ data: stateModule[j]);
+ })
+ : [],
+ ),
+ SizedBox(
+ height:
+ 26.rpx), // 每个 widget 下方间距(包括最后一个)
+ ],
);
- },
- ),
+ }),
+ ],
),
),
);
diff --git a/lib/pages/main_bottom/mine_page.dart b/lib/pages/main_bottom/mine_page.dart
index 903bd7a..d23da87 100644
--- a/lib/pages/main_bottom/mine_page.dart
+++ b/lib/pages/main_bottom/mine_page.dart
@@ -629,13 +629,13 @@ class _MinePageState extends State {
// textColor:
// themeController.currentColor.sc2,
// );
- Get.toNamed("/newSleepReportPage",
- arguments: {
- 'date': DateTime.now()
- .millisecondsSinceEpoch,
- "mac": 'aaaaaaeeeeeq',
- 'type': 1
- });
+ // Get.toNamed("/newSleepReportPage",
+ // arguments: {
+ // 'date': DateTime.now()
+ // .millisecondsSinceEpoch,
+ // "mac": 'aaaaaaeeeeeq',
+ // 'type': 1
+ // });
}
},
child: Container(
diff --git a/lib/pages/person/person_page.dart b/lib/pages/person/person_page.dart
index 73e7a7f..fdacbfd 100644
--- a/lib/pages/person/person_page.dart
+++ b/lib/pages/person/person_page.dart
@@ -742,6 +742,9 @@ class _EPageState extends State {
),
),
),
+ SizedBox(
+ height: 20.rpx,
+ ),
],
),
),
diff --git a/lib/pages/repair/apply_repair_page.dart b/lib/pages/repair/apply_repair_page.dart
index 26d5318..bc582df 100644
--- a/lib/pages/repair/apply_repair_page.dart
+++ b/lib/pages/repair/apply_repair_page.dart
@@ -160,64 +160,65 @@ class _ApplyRepairPageState extends State {
mainAxisSize: MainAxisSize.max,
children: [
Obx(() {
- return Row(
- mainAxisSize: MainAxisSize.max,
- children: deviceTypeController.deviceTypeList.value
- .map(
- (deviceType) => CustomCard(
- borderRadius:
- AppConstants().button_container_radius,
- onTap: () async {
- repairController.device_type.value =
- deviceType['type'];
- repairController.repairList
- .clear(); // 清空旧数据
- repairController.repairList
- .add({}); // 添加新数据
- await bodyDeviceController
- .getDeviceList(); // 等待数据加载
- _updateRepairItemKeys(); // 清空后更新 keys
- repairController
- .updateAll(); // 手动触发更新(如果未自动更新)
- },
- colors: deviceType['type'] ==
- repairController.device_type.value
- ? [
- themeController.currentColor.sc1,
- themeController.currentColor.sc2,
- ]
- : [themeController.currentColor.sc5],
- child: Container(
- width: (MediaQuery.sizeOf(context).width *
- 0.284)
- .rpx,
- constraints: BoxConstraints(
- minWidth: 213.rpx,
- minHeight: 91.rpx,
- ),
- decoration: BoxDecoration(
- borderRadius:
- BorderRadius.circular(20.rpx),
- ),
- child: Align(
- alignment: AlignmentDirectional(0, 0),
- child: Text(
- deviceType[
- 'name'], // 假设 deviceType 有 name 字段
- style: TextStyle(
- letterSpacing: 0.0,
- color:
- themeController.currentColor.sc3,
- fontSize: AppConstants()
- .normal_text_fontSize,
+ return SingleChildScrollView(
+ scrollDirection: Axis.horizontal, // 横向滚动
+ child: Row(
+ mainAxisSize: MainAxisSize.min, // 设置为 min,避免撑满父组件宽度
+ children: deviceTypeController.deviceTypeList.value
+ .map(
+ (deviceType) => CustomCard(
+ borderRadius:
+ AppConstants().button_container_radius,
+ onTap: () async {
+ repairController.device_type.value =
+ deviceType['type'];
+ repairController.repairList
+ .clear(); // 清空旧数据
+ repairController.repairList
+ .add({}); // 添加新数据
+ await bodyDeviceController
+ .getDeviceList(); // 等待数据加载
+ _updateRepairItemKeys(); // 清空后更新 keys
+ repairController.updateAll(); // 手动触发更新
+ },
+ colors: deviceType['type'] ==
+ repairController.device_type.value
+ ? [
+ themeController.currentColor.sc1,
+ themeController.currentColor.sc2,
+ ]
+ : [themeController.currentColor.sc5],
+ child: Container(
+ width: (MediaQuery.sizeOf(context).width *
+ 0.284)
+ .rpx,
+ constraints: BoxConstraints(
+ minWidth: 213.rpx,
+ minHeight: 91.rpx,
+ ),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.circular(20.rpx),
+ ),
+ child: Align(
+ alignment: AlignmentDirectional(0, 0),
+ child: Text(
+ deviceType['name'],
+ style: TextStyle(
+ letterSpacing: 0.0,
+ color: themeController
+ .currentColor.sc3,
+ fontSize: AppConstants()
+ .normal_text_fontSize,
+ ),
),
),
),
),
- ),
- )
- .toList()
- .divide(SizedBox(width: 25.rpx)),
+ )
+ .toList()
+ .divide(SizedBox(width: 25.rpx)),
+ ),
);
}),
Obx(() {
diff --git a/lib/pages/repair/repair_list_page.dart b/lib/pages/repair/repair_list_page.dart
index 1674d93..469c9a9 100644
--- a/lib/pages/repair/repair_list_page.dart
+++ b/lib/pages/repair/repair_list_page.dart
@@ -102,7 +102,7 @@ class _RepairListPageState extends State {
child: Obx(() {
final isEmpty = repairController.repairHistory.value.isEmpty;
if (isEmpty) {
- return Expanded(child: NullDataWidget());
+ return NullDataWidget();
}
return SingleChildScrollView(
child: Column(