From 30027f40c27068b7bfddcc6b0ff7b5061520da99 Mon Sep 17 00:00:00 2001 From: czz <862977248@qq.com> Date: Thu, 10 Jul 2025 11:16:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=A5=E5=8E=86=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/img/icon/calendar.svg | 2 +- lib/component/base/SleepCalendarWidget.dart | 101 ++- lib/component/base/SleepdateWidget.dart | 84 ++- lib/pages/common/selectDialog.dart | 55 +- lib/pages/login/other_login.dart | 1 + lib/pages/mh_page/edit_address_page.dart | 666 +++++++----------- lib/pages/mh_page/message/messageDetail.dart | 54 +- lib/pages/mh_page/repair_history_widget.dart | 2 +- .../mh_page/user/page/mht_login_page.dart | 8 +- .../sleep_report/new_sleep_report_page.dart | 9 +- 10 files changed, 502 insertions(+), 480 deletions(-) diff --git a/assets/img/icon/calendar.svg b/assets/img/icon/calendar.svg index 74d3b59..b603c28 100644 --- a/assets/img/icon/calendar.svg +++ b/assets/img/icon/calendar.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/lib/component/base/SleepCalendarWidget.dart b/lib/component/base/SleepCalendarWidget.dart index 06d920a..7e5c707 100644 --- a/lib/component/base/SleepCalendarWidget.dart +++ b/lib/component/base/SleepCalendarWidget.dart @@ -3,8 +3,11 @@ import 'package:get/get.dart'; 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/tool/ClickableContainer.dart'; +import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/date/CalendarController.dart'; +import 'package:vbvs_app/pages/main_bottom/component/main_page_b_bottom_change.dart'; import 'SleepdateWidget.dart'; class SleepCalendarWidget extends StatefulWidget { @@ -12,9 +15,11 @@ class SleepCalendarWidget extends StatefulWidget { final ValueChanged? onDateSelected; final int? type; // 新增参数,默认日历类型为日 final Color highlightColor; // ✅ 新增 + final String? mac; const SleepCalendarWidget({ super.key, + this.mac, this.timestamp, this.onDateSelected, this.type = 1, @@ -27,27 +32,89 @@ class SleepCalendarWidget extends StatefulWidget { class _SleepCalendarWidgetState extends State { CalendarController calendarController = Get.find(); - + RxMap sleepDate = {}.obs; + RxList showLabel = [ + {"level": 5, "name": "无报告", "color": "#9E9E9E"} + ].obs; + // @override + // void initState() { + // super.initState(); + // final initialDate = widget.timestamp != null + // ? DateTime.fromMillisecondsSinceEpoch(widget.timestamp!) + // : DateTime.now(); + // calendarController.displayedMonth.value = initialDate; + // calendarController.selectedDate.value = initialDate; + // } @override void initState() { super.initState(); + final initialDate = widget.timestamp != null ? DateTime.fromMillisecondsSinceEpoch(widget.timestamp!) : DateTime.now(); calendarController.displayedMonth.value = initialDate; calendarController.selectedDate.value = initialDate; + + // 初始化请求 + fetchDate(initialDate); + + // 每当月份变化时,重新请求数据 + ever(calendarController.displayedMonth, (DateTime newMonth) { + fetchDate(newMonth); + }); + } + + Future fetchDate(DateTime timeStamp) async { + final dateStr = timeStamp.toString().split(' ')[0]; + + await requestWithLog( + logTitle: "查询睡眠报告", + method: MyHttpMethod.get, + queryUrl: + "https://sleepdata.he-info.com/api/analysis/sleep/analysis?mac=${widget.mac}&time=$dateStr&type=3", + onSuccess: (res) { + sleepDate.value = res.data; + showLabel.value = [ + ...res.data['scoreList']['type'], + {"level": 5, "name": "无报告", "color": "#9E9E9E"}, + // ✅ 注意拼写是 scoreList + ]; + }, + onFailure: (res) { + sleepDate.value = {}; + showLabel.value = [ + {"level": 5, "name": "无报告", "color": "#9E9E9E"}, + ]; + }, + ); + } + + Future fetchSleepColor(DateTime timeStamp) async { + final dateStr = timeStamp.toString().split(' ')[0]; + + await requestWithLog( + logTitle: "查询睡眠报告", + method: MyHttpMethod.get, + queryUrl: "https://sleepdata.he-info.com/api/analysis/sleep/score/type", + onSuccess: (res) { + sleepDate.value = res.data; + showLabel.value = [ + ...res.data['scoreList']['type'], + {"level": 5, "name": "无报告", "color": "#9E9E9E"}, + // ✅ 注意拼写是 scoreList + ]; + }, + onFailure: (res) { + sleepDate.value = {}; + showLabel.value = [ + {"level": 5, "name": "无报告", "color": "#9E9E9E"}, + ]; + }, + ); } @override Widget build(BuildContext context) { - List> showLabel = [ - {"level": 1, "name": "优秀", "color": Color(0xFF4CAF50)}, - {"level": 2, "name": "良好", "color": Color(0xFF8BC34A)}, - {"level": 3, "name": "合格", "color": Color(0xFFFFC107)}, - {"level": 4, "name": "注意", "color": Color(0xFFF44336)}, - {"level": 5, "name": "无报告", "color": Color(0xFF9E9E9E)}, - ]; - return Container( width: double.infinity, decoration: BoxDecoration( @@ -117,7 +184,7 @@ class _SleepCalendarWidgetState extends State { ); } - Widget _buildCalendarBody(List> showLabel) { + Widget _buildCalendarBody(List showLabel) { return Container( width: double.infinity, constraints: BoxConstraints(minHeight: 720.rpx), @@ -135,9 +202,8 @@ class _SleepCalendarWidgetState extends State { children: [ // 仅当为日历模式显示周标题 _buildWeekdayHeader(), - // 日历日期格子,支持日和周的高亮逻辑 - - _buildCalendarGrid(calendarRows, selectedDate), + // 日历日期格子,支持日和周的高亮逻辑sleep + _buildCalendarGrid(calendarRows, selectedDate, sleepDate.value), // TODO: 你可以扩展 month 类型的展示 SizedBox(height: 55.rpx), _buildLegend(showLabel), @@ -169,8 +235,8 @@ class _SleepCalendarWidgetState extends State { ); } - Widget _buildCalendarGrid( - List> calendarRows, DateTime? selectedDate) { + Widget _buildCalendarGrid(List> calendarRows, + DateTime? selectedDate, Map sleepDate) { final isMonthSelected = widget.type == 3; Widget content = Column( @@ -197,6 +263,7 @@ class _SleepCalendarWidgetState extends State { return Expanded( child: SleepdateWidget( highlightColor: widget.highlightColor, // ✅ 传入高亮颜色 + sleepDate: sleepDate, date: date, isSelected: isSelected, onTap: () { @@ -257,7 +324,7 @@ class _SleepCalendarWidgetState extends State { } } - Widget _buildLegend(List> showLabel) { + Widget _buildLegend(List showLabel) { return Wrap( spacing: 20.rpx, runSpacing: 20.rpx, @@ -271,7 +338,7 @@ class _SleepCalendarWidgetState extends State { width: 20.rpx, height: 20.rpx, decoration: BoxDecoration( - color: item["color"], + color: stringToColor(item["color"]), borderRadius: BorderRadius.circular(10.rpx), ), ), diff --git a/lib/component/base/SleepdateWidget.dart b/lib/component/base/SleepdateWidget.dart index 2f604b3..7e03f7a 100644 --- a/lib/component/base/SleepdateWidget.dart +++ b/lib/component/base/SleepdateWidget.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; +import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; class SleepdateWidget extends StatelessWidget { @@ -7,17 +8,90 @@ class SleepdateWidget extends StatelessWidget { final bool isSelected; final VoidCallback onTap; final Color highlightColor; // 新增 - - const SleepdateWidget({ - super.key, + final Map sleepDate; + SleepdateWidget({ + required this.sleepDate, required this.date, required this.isSelected, required this.onTap, this.highlightColor = Colors.black, // 默认值黑色 }); + @override + // Widget build(BuildContext context) { + // return ClickableContainer( + // onTap: onTap, + // backgroundColor: Colors.transparent, + // highlightColor: Colors.transparent, + // padding: EdgeInsets.all(4.rpx), + // child: Container( + // width: 90.rpx, + // height: 90.rpx, + // decoration: BoxDecoration( + // borderRadius: BorderRadius.circular(30.rpx), + // color: isSelected ? highlightColor : Colors.transparent, // 使用传入的颜色 + // ), + // child: Padding( + // padding: + // EdgeInsetsDirectional.fromSTEB(10.rpx, 10.rpx, 10.rpx, 10.rpx), + // child: Container( + // decoration: BoxDecoration( + // color: Color(0xFF757575), + // shape: BoxShape.circle, + // ), + // alignment: Alignment.center, + // child: Text( + // '${date.day}', + // style: TextStyle( + // color: Colors.white, + // fontSize: 26.rpx, + // letterSpacing: 0.0, + // ), + // ), + // ), + // ), + // ), + // ); + // } @override Widget build(BuildContext context) { + Color? fillColor; + + // 判断是否存在 score 数据 + final List? dataList = sleepDate['scoreList']?['data']; + final List? typeList = sleepDate['scoreList']?['type']; + + if (dataList != null && typeList != null) { + // 查找是否有匹配日期的数据 + for (var item in dataList) { + final st = item['st']; + final level = item['level']; + + if (st is int) { + final itemDate = + DateTime.fromMillisecondsSinceEpoch(st).toLocal(); // 转为本地时间 + + // 判断是否是同一天 + if (itemDate.year == date.year && + itemDate.month == date.month && + itemDate.day == date.day) { + // 找到对应 level 的颜色 + final matchType = typeList.firstWhere( + (e) => e['level'] == level, + orElse: () => null, + ); + + if (matchType != null && matchType['color'] != null) { + final hexColor = matchType['color']; + fillColor = stringToColor(hexColor); + } + + break; // 找到就跳出 + } + } + } + } + return ClickableContainer( onTap: onTap, backgroundColor: Colors.transparent, @@ -28,14 +102,14 @@ class SleepdateWidget extends StatelessWidget { height: 90.rpx, decoration: BoxDecoration( borderRadius: BorderRadius.circular(30.rpx), - color: isSelected ? highlightColor : Colors.transparent, // 使用传入的颜色 + color: isSelected ? highlightColor : Colors.transparent, ), child: Padding( padding: EdgeInsetsDirectional.fromSTEB(10.rpx, 10.rpx, 10.rpx, 10.rpx), child: Container( decoration: BoxDecoration( - color: Color(0xFF757575), + color: fillColor ?? Color(0xFF757575), // 如果匹配不到就默认灰色 shape: BoxShape.circle, ), alignment: Alignment.center, diff --git a/lib/pages/common/selectDialog.dart b/lib/pages/common/selectDialog.dart index c4bfc48..3af076f 100644 --- a/lib/pages/common/selectDialog.dart +++ b/lib/pages/common/selectDialog.dart @@ -1328,28 +1328,49 @@ void showProgressDialog( void showSleepCalendarBottomSheet({ required BuildContext context, int? timestamp, - int? type = 1, // 新增参数,默认值为1 + int? type = 1, + String? mac, required void Function(DateTime selectedDate) onDateSelected, }) { - showModalBottomSheet( + showGeneralDialog( context: context, - isScrollControlled: false, - backgroundColor: Colors.transparent, - builder: (context) { - return Container( - decoration: BoxDecoration( - color: const Color(0xFF242835), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20.rpx), - topRight: Radius.circular(20.rpx), + barrierDismissible: true, + barrierLabel: 'Dismiss', + barrierColor: Colors.black.withOpacity(0.4), // 移到这里,替代 Scaffold 背景 + transitionDuration: const Duration(milliseconds: 300), + pageBuilder: (context, animation, secondaryAnimation) { + return GestureDetector( + onTap: () { + Navigator.of(context).pop(); // 点击空白关闭 + }, + child: Material( + type: MaterialType.transparency, + child: Align( + alignment: Alignment.bottomCenter, + child: GestureDetector( + onTap: () {}, // 阻止点击透传到外部(避免误关) + child: FractionallySizedBox( + widthFactor: 1.0, + heightFactor: 0.55, + child: Container( + decoration: BoxDecoration( + color: const Color(0xFF242835), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(20.rpx), + topRight: Radius.circular(20.rpx), + ), + ), + child: SleepCalendarWidget( + timestamp: timestamp, + type: type, + mac: mac, + onDateSelected: onDateSelected, + ), + ), + ), + ), ), ), - child: SleepCalendarWidget( - timestamp: timestamp, - type: type, // 传递类型给子组件 - onDateSelected: onDateSelected, - // highlightColor: Colors.green, - ), ); }, ); diff --git a/lib/pages/login/other_login.dart b/lib/pages/login/other_login.dart index 02d4ac8..34629ac 100644 --- a/lib/pages/login/other_login.dart +++ b/lib/pages/login/other_login.dart @@ -314,6 +314,7 @@ class _OtherLoginPageState extends State { ), ), ), + Align( alignment: AlignmentDirectional(-1, 0), child: Padding( diff --git a/lib/pages/mh_page/edit_address_page.dart b/lib/pages/mh_page/edit_address_page.dart index b891fbf..8c17b48 100644 --- a/lib/pages/mh_page/edit_address_page.dart +++ b/lib/pages/mh_page/edit_address_page.dart @@ -317,16 +317,14 @@ class EditAddressPage extends GetView ), ), Container( - width: MediaQuery.sizeOf( - context) - .width, - height: MediaQuery.sizeOf( - context) - .height * - 0.038, - constraints: - const BoxConstraints( - minHeight: 31, + // width: MediaQuery.sizeOf( + // context) + // .width, + height: + bodysize!.maxHeight * + 0.038, + constraints: BoxConstraints( + minHeight: 61.rpx, ), decoration: BoxDecoration(), child: Row( @@ -339,19 +337,14 @@ class EditAddressPage extends GetView context) .width * 0.17, - height: - MediaQuery.sizeOf( - context) - .height * - 0.038, + decoration: + BoxDecoration(), constraints: BoxConstraints( minWidth: 105.rpx, maxWidth: 105.rpx), - decoration: - BoxDecoration(), child: Row( mainAxisSize: MainAxisSize @@ -375,8 +368,6 @@ class EditAddressPage extends GetView ), Expanded( child: Container( - width: 100, - height: 100, decoration: BoxDecoration( color: @@ -386,105 +377,120 @@ class EditAddressPage extends GetView .circular( 8), ), - child: - TextFormField( - // autofocus: true, - obscureText: - false, - onChanged: (val) { - controller.model - .name = val; - }, - - initialValue: - address[ - 'name'], - decoration: - InputDecoration( - contentPadding: - EdgeInsets - .symmetric( - vertical: - 25.rpx, - horizontal: - 26.rpx, - ), - labelStyle: - TextStyle( - fontFamily: - 'Readex Pro', - letterSpacing: - 0, - ), - hintStyle: - TextStyle( - fontFamily: - 'Readex Pro', - letterSpacing: - 0, - ), - enabledBorder: - UnderlineInputBorder( - borderSide: - const BorderSide( - color: Color( - 0x00000000), - width: 2, + width: + double.infinity, + child: Padding( + padding: + EdgeInsetsDirectional + .fromSTEB( + 35.rpx, + 0, + 35.rpx, + 0), + child: Row( + mainAxisSize: + MainAxisSize + .max, + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Expanded( + child: + Container( + child: + Align( + alignment: AlignmentDirectional( + -1, + 0), + child: + TextFormField( + onChanged: + (value) { + controller.model.name = + value; + }, + autofocus: + false, + obscureText: + false, + decoration: + InputDecoration( + contentPadding: + EdgeInsets.all(0), + isDense: + true, + labelStyle: + TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + ), + hintStyle: + TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc4, + ), + enabledBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + errorBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedErrorBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + filled: + false, + fillColor: + Colors.white, + ), + style: + TextStyle( + fontFamily: + 'Readex Pro', + letterSpacing: + 0, + color: + Colors.black, + fontSize: + 26.rpx, + ), + // cursorColor: + // Colors.black, + // validator: _model + // .textControllerValidator + // .asValidator(context), + ), + ), + ), ), - borderRadius: - BorderRadius - .circular( - 8), - ), - focusedBorder: - UnderlineInputBorder( - borderSide: - const BorderSide( - color: Color( - 0x00000000), - width: 2, - ), - borderRadius: - BorderRadius - .circular( - 8), - ), - errorBorder: - UnderlineInputBorder( - borderSide: - const BorderSide( - color: Color( - 0x00000000), - width: 2, - ), - borderRadius: - BorderRadius - .circular( - 8), - ), - focusedErrorBorder: - UnderlineInputBorder( - borderSide: - const BorderSide( - color: Color( - 0x00000000), - width: 2, - ), - borderRadius: - BorderRadius - .circular( - 8), - ), - ), - style: TextStyle( - fontFamily: - 'Readex Pro', - letterSpacing: - 0, - color: Colors - .black, - fontSize: - 26.rpx, + ], ), ), ), @@ -494,17 +500,16 @@ class EditAddressPage extends GetView ), ), Container( - width: MediaQuery.sizeOf( - context) - .width, - height: MediaQuery.sizeOf( - context) - .height * - 0.038, - constraints: - const BoxConstraints( - minHeight: 31, + // width: MediaQuery.sizeOf( + // context) + // .width, + height: + bodysize!.maxHeight * + 0.038, + constraints: BoxConstraints( + minHeight: 61.rpx, ), + decoration: BoxDecoration(), child: Row( mainAxisSize: MainAxisSize.max, @@ -515,19 +520,14 @@ class EditAddressPage extends GetView context) .width * 0.17, - height: - MediaQuery.sizeOf( - context) - .height * - 0.038, + decoration: + BoxDecoration(), constraints: BoxConstraints( minWidth: 105.rpx, maxWidth: 105.rpx), - decoration: - BoxDecoration(), child: Row( mainAxisSize: MainAxisSize @@ -535,136 +535,145 @@ class EditAddressPage extends GetView children: [ Text( '手机号', - style: - TextStyle( - fontFamily: - 'Readex Pro', - fontSize: - AppFontsize - .normal_text_size, - letterSpacing: - 0, - color: Colors - .white, - ), + style: TextStyle( + fontFamily: + 'Readex Pro', + fontSize: + AppFontsize + .normal_text_size, + letterSpacing: + 0, + color: Colors + .white), ), ], ), ), Expanded( child: Container( - width: 100, - height: 100, decoration: BoxDecoration( + color: + Colors.white, borderRadius: BorderRadius .circular( 8), - color: - Colors.white, ), - child: - TextFormField( - // autofocus: true, - onChanged: (val) { - controller.model - .tel = val; - }, - textAlignVertical: - TextAlignVertical - .center, // 垂直居中 - obscureText: - false, - initialValue: - address[ - 'tel'], - decoration: - InputDecoration( - contentPadding: - EdgeInsets - .symmetric( - vertical: - 25.rpx, - horizontal: - 26.rpx, - ), - labelStyle: - TextStyle( - fontFamily: - 'Readex Pro', - letterSpacing: - 0, - ), - hintStyle: - TextStyle( - fontFamily: - 'Readex Pro', - letterSpacing: - 0, - ), - enabledBorder: - UnderlineInputBorder( - borderSide: - const BorderSide( - color: Color( - 0x00000000), - width: 2, + width: + double.infinity, + child: Padding( + padding: + EdgeInsetsDirectional + .fromSTEB( + 35.rpx, + 0, + 35.rpx, + 0), + child: Row( + mainAxisSize: + MainAxisSize + .max, + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Expanded( + child: + Container( + child: + Align( + alignment: AlignmentDirectional( + -1, + 0), + child: + TextFormField( + onChanged: + (value) { + controller.model.tel = + value; + }, + autofocus: + false, + obscureText: + false, + decoration: + InputDecoration( + contentPadding: + EdgeInsets.all(0), + isDense: + true, + labelStyle: + TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + ), + hintStyle: + TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc4, + ), + enabledBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + errorBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedErrorBorder: + OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + filled: + false, + fillColor: + Colors.white, + ), + style: + TextStyle( + fontFamily: + 'Readex Pro', + letterSpacing: + 0, + color: + Colors.black, + fontSize: + 26.rpx, + ), + // cursorColor: + // Colors.black, + // validator: _model + // .textControllerValidator + // .asValidator(context), + ), + ), + ), ), - borderRadius: - BorderRadius - .circular( - 8), - ), - focusedBorder: - UnderlineInputBorder( - borderSide: - const BorderSide( - color: Color( - 0x00000000), - width: 2, - ), - borderRadius: - BorderRadius - .circular( - 8), - ), - errorBorder: - UnderlineInputBorder( - borderSide: - const BorderSide( - color: Color( - 0x00000000), - width: 2, - ), - borderRadius: - BorderRadius - .circular( - 8), - ), - focusedErrorBorder: - UnderlineInputBorder( - borderSide: - const BorderSide( - color: Color( - 0x00000000), - width: 2, - ), - borderRadius: - BorderRadius - .circular( - 8), - ), - ), - style: TextStyle( - fontFamily: - 'Readex Pro', - letterSpacing: - 0, - color: Colors - .black, - fontSize: - 26.rpx, + ], ), ), ), @@ -740,158 +749,6 @@ class EditAddressPage extends GetView ], ), ), - // Expanded( - // child: InkWell( - // onTap: () { - // CityPicker.show( - // context: - // context, - // cityPickerListener: - // this, - // // 在大屏/Web 上最大宽度为 600px - // // 移除内边距 - // ); - // }, - // child: Container( - // width: 100, - // height: 100, - // decoration: - // BoxDecoration( - // color: const Color( - // 0xFFF3F5F6), - // borderRadius: - // BorderRadius - // .circular( - // 8), - // ), - // alignment: - // Alignment - // .center, - // child: Obx(() { - // return TextFormField( - // enabled: - // false, - // controller: controller.onReDraw( - // TextEditingController( - // text: - // controller.model.all_address), - // (val) { - // val.text = - // controller.model.all_address ?? - // ""; - // }), - // // autofocus: true, - // obscureText: - // false, - // maxLines: 1, - // textAlignVertical: - // TextAlignVertical - // .center, // 垂直居中 - // decoration: InputDecoration( - // contentPadding: EdgeInsets.symmetric( - // vertical: - // 25.rpx, - // horizontal: - // 26.rpx, - // ), - // labelStyle: TextStyle( - // fontFamily: - // 'Readex Pro', - // letterSpacing: - // 0, - // ), - // hintStyle: TextStyle( - // fontFamily: - // 'Readex Pro', - // letterSpacing: - // 0, - // ), - // enabledBorder: UnderlineInputBorder( - // borderSide: - // const BorderSide( - // color: - // Color(0x00000000), - // width: - // 2, - // ), - // borderRadius: - // BorderRadius.circular(8), - // ), - // disabledBorder: UnderlineInputBorder( - // borderSide: - // const BorderSide( - // color: - // Color(0x00000000), - // width: - // 0, - // ), - // borderRadius: - // BorderRadius.circular(8), - // ), - // focusedBorder: UnderlineInputBorder( - // borderSide: - // const BorderSide( - // color: - // Color(0x00000000), - // width: - // 2, - // ), - // borderRadius: - // BorderRadius.circular(8), - // ), - // errorBorder: UnderlineInputBorder( - // borderSide: - // const BorderSide( - // color: - // Color(0x00000000), - // width: - // 2, - // ), - // borderRadius: - // BorderRadius.circular(8), - // ), - // focusedErrorBorder: UnderlineInputBorder( - // borderSide: - // const BorderSide( - // color: - // Color(0x00000000), - // width: - // 2, - // ), - // borderRadius: - // BorderRadius.circular(8), - // ), - // suffixIcon: Transform.rotate( - // angle: - // 1.5708, // 90 度相当于 pi / 2 弧度 - // child: - // Icon( - // Icons.arrow_forward_ios, - // color: - // Colors.black, - // size: - // 26.rpx, - // ), - // )), - // style: - // TextStyle( - // fontFamily: - // 'Readex Pro', - // letterSpacing: - // 0, - // color: Color( - // 0xFF333333), - // fontSize: - // 26.rpx, - // overflow: - // TextOverflow - // .ellipsis, - // ), - // ); - // })), - - // ), - // ), Expanded( child: InkWell( onTap: () { @@ -1087,7 +944,7 @@ class EditAddressPage extends GetView vertical: 10.rpx, horizontal: - 26.rpx, + 35.rpx, ), labelStyle: TextStyle( @@ -1163,6 +1020,9 @@ class EditAddressPage extends GetView fontSize: 26.rpx, ), + // cursorColor: + // Colors + // .black, ), ), ), diff --git a/lib/pages/mh_page/message/messageDetail.dart b/lib/pages/mh_page/message/messageDetail.dart index bc7b95a..74fefed 100644 --- a/lib/pages/mh_page/message/messageDetail.dart +++ b/lib/pages/mh_page/message/messageDetail.dart @@ -22,8 +22,10 @@ class MessageDetailPage extends StatefulWidget { class _MessageDetailPageState extends State { MHDeviceShareController controller = Get.find(); MhMessageController messageController = Get.find(); + RxInt status = 0.obs; @override Widget build(BuildContext context) { + status.value = widget.data['status']; var messageInfo = widget.data; return LayoutBuilder( builder: (context, boxConstraints) => GestureDetector( @@ -171,34 +173,32 @@ class _MessageDetailPageState extends State { ), width: double.infinity, child: TextButton( - onPressed: () async { - if (widget.data['status'] == 1) { - ApiResponse apiResponse = - await controller.confirmShare(widget.data['data']['shareCode']); - if (apiResponse.code == HttpStatusCodes.ok) { - TopSlideNotification.show(context, - text: apiResponse.msg!, textColor: Color(0xFF00C1AA)); - messageController.getMessageList(); - messageController.updateAll(); - } else { - TopSlideNotification.show(context, - text: apiResponse.msg!, textColor: Color(0XFFFF7159)); - messageController.getMessageList(); - messageController.updateAll(); + onPressed: () async { + if (widget.data['status'] == 1) { + ApiResponse apiResponse = await controller + .confirmShare(widget.data['data']['shareCode']); + if (apiResponse.code == HttpStatusCodes.ok) { + TopSlideNotification.show(context, + text: apiResponse.msg!, textColor: Color(0xFF00C1AA)); + messageController.getMessageList(); + messageController.updateAll(); + } else { + TopSlideNotification.show(context, + text: apiResponse.msg!, textColor: Color(0XFFFF7159)); + messageController.getMessageList(); + messageController.updateAll(); + } } - } - }, - child: Text( - getStatusText(widget.data['status']), - style: TextStyle( - fontFamily: 'Readex Pro', - color: - widget.data['status'] == 1 ? Colors.white : Color(0xFF929699), - fontSize: 26.rpx, - letterSpacing: 0, - ), - ), - ), + }, + child: Obx(() => Text( + getStatusText(status.value), + style: TextStyle( + fontFamily: 'Readex Pro', + color: status.value == 1 ? Colors.white : Color(0xFF929699), + fontSize: 26.rpx, + letterSpacing: 0, + ), + ))), ); } diff --git a/lib/pages/mh_page/repair_history_widget.dart b/lib/pages/mh_page/repair_history_widget.dart index 578af95..b6f054f 100644 --- a/lib/pages/mh_page/repair_history_widget.dart +++ b/lib/pages/mh_page/repair_history_widget.dart @@ -63,7 +63,7 @@ class RepairHistoryWidget extends GetView { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - repairListController.model.repairList[index]['device'] + repairListController.model.repairList[index]['device'][0] ['mac'] ?? '', style: TextStyle( diff --git a/lib/pages/mh_page/user/page/mht_login_page.dart b/lib/pages/mh_page/user/page/mht_login_page.dart index 2d3ac19..54e9341 100644 --- a/lib/pages/mh_page/user/page/mht_login_page.dart +++ b/lib/pages/mh_page/user/page/mht_login_page.dart @@ -1430,7 +1430,7 @@ class MHTLoginPage extends GetView { 'Readex Pro', color: Colors.white, - fontSize: 12, + fontSize: 23.rpx, letterSpacing: 0, ), ), @@ -1458,7 +1458,7 @@ class MHTLoginPage extends GetView { color: stringToColor( "FF9F66"), - fontSize: 12, + fontSize: 23.rpx, letterSpacing: 0, ), @@ -1476,7 +1476,7 @@ class MHTLoginPage extends GetView { 'Readex Pro', color: Colors.white, - fontSize: 12, + fontSize: 23.rpx, letterSpacing: 0, ), ), @@ -1504,7 +1504,7 @@ class MHTLoginPage extends GetView { color: stringToColor( "FF9F66"), - fontSize: 12, + fontSize: 23.rpx, letterSpacing: 0, ), diff --git a/lib/pages/sleep_report/new_sleep_report_page.dart b/lib/pages/sleep_report/new_sleep_report_page.dart index 73a3782..64315f4 100644 --- a/lib/pages/sleep_report/new_sleep_report_page.dart +++ b/lib/pages/sleep_report/new_sleep_report_page.dart @@ -886,8 +886,6 @@ class _NewSleepReportPageState extends State { final today = DateTime(now.year, now.month, now.day); DateTime targetDate = selectedDate; - - if (type == 1) { final nextDate = selectedDate.add(const Duration(days: 1)); if (!nextDate.isAfter(today)) { @@ -1085,6 +1083,7 @@ class _NewSleepReportPageState extends State { type: sleepReportController.model.type, timestamp: selectedDate.millisecondsSinceEpoch, context: context, + mac: widget.data['mac'], onDateSelected: (newDate) { sleepReportController.selectedDate.value = newDate; calendarController.selectedDate.value = newDate; @@ -1121,9 +1120,9 @@ class _NewSleepReportPageState extends State { }, ); }, - child: SizedBox( - width: 28.rpx, - height: 28.rpx, + child: Container( + width: 36.rpx, + height: 36.rpx, child: SvgPicture.asset( 'assets/img/icon/calendar.svg', fit: BoxFit.cover,