diff --git a/assets/img/icon/arrow_left.svg b/assets/img/icon/arrow_left.svg index 6767c9c..832b94a 100644 --- a/assets/img/icon/arrow_left.svg +++ b/assets/img/icon/arrow_left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/lib/controller/weather/weather_controller.dart b/lib/controller/weather/weather_controller.dart index 53ea313..4f984c6 100644 --- a/lib/controller/weather/weather_controller.dart +++ b/lib/controller/weather/weather_controller.dart @@ -95,6 +95,8 @@ class WeatherModelController extends GetControllerEx { // 调用获取天气方法 _getCurrentWeather(); } catch (e) { + + print(e); EasyDartModule.logger.error("获取位置失败: $e"); } diff --git a/lib/pages/common/selectDialog.dart b/lib/pages/common/selectDialog.dart index 3af076f..9146da1 100644 --- a/lib/pages/common/selectDialog.dart +++ b/lib/pages/common/selectDialog.dart @@ -271,6 +271,153 @@ Future showDateSelectionDialog(BuildContext context, ); } +Future showMonthSelectionDialog( + BuildContext context, { + required DateTime checkDate, + Function(DateTime)? checkChange, + String title = "选择月份", +}) { + ThemeController themeController = Get.find(); + + final List years = List.generate(100, (i) => DateTime.now().year - i) + ..sort(); + final List months = List.generate(12, (i) => i + 1); + + final RxInt yearIndex = years.indexOf(checkDate.year).obs; + final RxInt monthIndex = months.indexOf(checkDate.month).obs; + + return showDialog( + context: context, + barrierDismissible: true, + builder: (BuildContext context) { + return Stack( + children: [ + Positioned( + bottom: 0, + left: 0, + right: 0, + child: Material( + color: Colors.transparent, + child: Dialog( + backgroundColor: const Color(0xFF003058), + insetPadding: EdgeInsets.zero, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(0), + ), + child: Container( + width: double.infinity, + padding: EdgeInsets.fromLTRB(30.rpx, 10.rpx, 30.rpx, 90.rpx), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ClickableContainer( + backgroundColor: Colors.transparent, + highlightColor: Colors.transparent, + padding: EdgeInsets.zero, + onTap: () => Navigator.of(context).pop(), + child: Container( + width: 100.rpx, + height: 60.rpx, + alignment: Alignment.center, + child: Text("取消", + style: TextStyle( + fontSize: 30.rpx, color: Colors.white)), + ), + ), + Text( + title, + style: TextStyle( + fontFamily: 'Readex Pro', + color: themeController.currentColor.sc3, + fontSize: 30.rpx, + ), + ), + ClickableContainer( + backgroundColor: Colors.transparent, + highlightColor: Colors.transparent, + padding: EdgeInsets.zero, + onTap: () { + final selectedDate = DateTime( + years[yearIndex.value], + months[monthIndex.value], + ); + Navigator.of(context).pop(); + checkChange?.call(selectedDate); + }, + child: Container( + width: 100.rpx, + height: 60.rpx, + alignment: Alignment.center, + child: Text("确定", + style: TextStyle( + fontSize: 30.rpx, + color: stringToColor("#84F5FF"))), + ), + ), + ], + ), + SizedBox(height: 20.rpx), + Stack( + children: [ + Positioned.fill( + child: IgnorePointer( + child: Center( + child: Container( + height: 90.rpx, + margin: + EdgeInsets.symmetric(horizontal: 95.rpx), + decoration: BoxDecoration( + color: const Color(0xFF84F5FF), + borderRadius: BorderRadius.circular(16.rpx), + ), + ), + ), + ), + ), + SizedBox( + height: 240.rpx, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 95.rpx), + child: Row( + children: [ + Expanded( + child: getOnePickers( + context, + years, + yearIndex, + unit: "年", + ), + ), + Expanded( + child: getOnePickers( + context, + months, + monthIndex, + unit: "月", + ), + ), + ], + ), + ), + ), + ], + ), + ], + ), + ), + ), + ), + ), + ], + ); + }, + ); +} + Future showWeightPickerDialog( BuildContext context, { required String initialWeight, // 初始体重(单位:kg) diff --git a/lib/pages/mh_page/component/easychart.dart b/lib/pages/mh_page/component/easychart.dart index 013b368..f4173e7 100644 --- a/lib/pages/mh_page/component/easychart.dart +++ b/lib/pages/mh_page/component/easychart.dart @@ -46,11 +46,12 @@ class LineView extends StatelessWidget { bottom: bottomPadding.rpx, ), child: EasyChartView( + key: Key(DateTime.now().toString()), size: Size(b.maxWidth, 220.rpx), drawer: ChartDrawer( xAxis: ChartAxis( - intent: 44, - entintent: 15, + intent: 28, + entintent: 9, labels: xLabels, count: xCount, ), @@ -177,7 +178,7 @@ class LineView extends StatelessWidget { remainHeight, Paint() ..color = - stringToColor(remainColor).withOpacity(0.8), + stringToColor(remainColor).withOpacity(0.5), ); } // 若已满,不绘制灰色段、也不显示文字(不做任何处理) diff --git a/lib/pages/mh_page/homepage/controller/mht_home_controller.dart b/lib/pages/mh_page/homepage/controller/mht_home_controller.dart index d7252f9..ae01ffc 100644 --- a/lib/pages/mh_page/homepage/controller/mht_home_controller.dart +++ b/lib/pages/mh_page/homepage/controller/mht_home_controller.dart @@ -66,9 +66,7 @@ class MHTHomeController extends GetControllerEx { String queryUrl = "${serviceAddress}${serviceName}${serviceApi}?bindNum=1"; String? language = ""; - if (languageController.selectLanguage != null) { - language = languageController.selectLanguage.value!.language_code; - } + language = languageController.selectLanguage.value!.language_code; if (language != null && language.isNotEmpty) { if (queryUrl.contains("?")) { queryUrl += "&lang=$language"; @@ -77,19 +75,14 @@ class MHTHomeController extends GetControllerEx { } } var response = await EasyDartModule.dio.get(queryUrl); - if (response != null) { - var responseData = - response.data is String ? jsonDecode(response.data) : response.data; - ApiResponse res = - ApiResponse.fromJson(responseData, (object) => object); - MyUtils.formatResponse(res, "设备.设备列表请求成功".tr, "设备.设备列表请求失败".tr); - if (res.code == HttpStatusCodes.ok) { - bindDeviceNum.value = res.total!; - updateAll(); - return res; - } - } else { - return ApiResponse(code: -1, msg: "服务器.失败".tr); + var responseData = + response.data is String ? jsonDecode(response.data) : response.data; + ApiResponse res = ApiResponse.fromJson(responseData, (object) => object); + MyUtils.formatResponse(res, "设备.设备列表请求成功".tr, "设备.设备列表请求失败".tr); + if (res.code == HttpStatusCodes.ok) { + bindDeviceNum.value = res.total!; + updateAll(); + return res; } return apiResponse; } catch (e) { @@ -126,9 +119,7 @@ class MHTHomeController extends GetControllerEx { } String? language = ""; - if (languageController.selectLanguage != null) { - language = languageController.selectLanguage.value!.language_code; - } + language = languageController.selectLanguage.value!.language_code; if (language != null && language.isNotEmpty) { queryParams['lang'] = language; } @@ -139,19 +130,14 @@ class MHTHomeController extends GetControllerEx { } var response = await EasyDartModule.dio.get(queryUrl); - if (response != null) { - var responseData = - response.data is String ? jsonDecode(response.data) : response.data; - ApiResponse res = - ApiResponse.fromJson(responseData, (object) => object); - MyUtils.formatResponse(res, "设备.设备列表请求成功".tr, "设备.设备列表请求失败".tr); - if (res.code == HttpStatusCodes.ok) { - deviceList.value = res.data!; - updateAll(); - return res; - } - } else { - return ApiResponse(code: -1, msg: "服务器.失败".tr); + var responseData = + response.data is String ? jsonDecode(response.data) : response.data; + ApiResponse res = ApiResponse.fromJson(responseData, (object) => object); + MyUtils.formatResponse(res, "设备.设备列表请求成功".tr, "设备.设备列表请求失败".tr); + if (res.code == HttpStatusCodes.ok) { + deviceList.value = res.data!; + updateAll(); + return res; } return apiResponse; } catch (e) { @@ -365,7 +351,7 @@ class MHTHomeController extends GetControllerEx { String serviceAddress = ServiceConstant.service_address; String serviceName = ServiceConstant.server_service; String serviceApi = ServiceConstant.device_show; - String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; + String queryUrl = "$serviceAddress$serviceName$serviceApi"; String? language = ""; if (languageController.selectLanguage != null) { language = languageController.selectLanguage.value!.language_code; @@ -568,7 +554,7 @@ class MHTHomeController extends GetControllerEx { String serviceName = ServiceConstant.server_service; String serviceApi = ServiceConstant.user_setting; String type = "control_${tmp['mac']}"; - String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; + String queryUrl = "$serviceAddress$serviceName$serviceApi"; var data = { "type": type, "duration": tmp['duration'], diff --git a/lib/pages/sleep_report/chart/DataShowWidget.dart b/lib/pages/sleep_report/chart/DataShowWidget.dart index c022d07..aa2090d 100644 --- a/lib/pages/sleep_report/chart/DataShowWidget.dart +++ b/lib/pages/sleep_report/chart/DataShowWidget.dart @@ -53,11 +53,12 @@ class _DataShowWidgetState extends State { width: MediaQuery.sizeOf(context).width * 0.35, // 固定宽度 decoration: BoxDecoration(), child: Align( - alignment: widget.alignment == MainAxisAlignment.start - ? Alignment.centerLeft - : widget.alignment == MainAxisAlignment.center - ? Alignment.center - : Alignment.centerRight, // 根据传入的 alignment 设置对齐 + alignment: Alignment.centerLeft, + // widget.alignment == MainAxisAlignment.start + // ? Alignment.centerLeft + // : widget.alignment == MainAxisAlignment.center + // ? Alignment.center + // : Alignment.centerRight, // 根据传入的 alignment 设置对齐 child: widget.widget1, // 显示传入的 widget1 ), ), diff --git a/lib/pages/sleep_report/chart/SegmentedCirclePainter.dart b/lib/pages/sleep_report/chart/SegmentedCirclePainter.dart index 9d5de36..6392b91 100644 --- a/lib/pages/sleep_report/chart/SegmentedCirclePainter.dart +++ b/lib/pages/sleep_report/chart/SegmentedCirclePainter.dart @@ -89,7 +89,7 @@ class SegmentedCircleWithCenterWidget extends StatelessWidget { centerWidget, // 放置自定义的中心 Widget Positioned( bottom: 140.rpx, - right: 60.rpx, // 放置在右侧 + right: 50.rpx, // 放置在右侧 child: SvgPicture.asset( _getTrendIcon(trend), width: trend != 0 ? 14.rpx : 18.rpx, diff --git a/lib/pages/sleep_report/component/SleepScoreWidget.dart b/lib/pages/sleep_report/component/SleepScoreWidget.dart index 651144e..fa75e4a 100644 --- a/lib/pages/sleep_report/component/SleepScoreWidget.dart +++ b/lib/pages/sleep_report/component/SleepScoreWidget.dart @@ -123,7 +123,7 @@ class _SleepScoreWidgetState extends State { // SegmentData(color: Colors.orange, value: 10), // ], segments: segments, - strokeWidth: 6.rpx, + strokeWidth: 12.rpx, gapAngle: 8, centerWidget: Container( child: Column( diff --git a/lib/pages/sleep_report/component/WeekDataWidget.dart b/lib/pages/sleep_report/component/WeekDataWidget.dart index 88b624e..c29a015 100644 --- a/lib/pages/sleep_report/component/WeekDataWidget.dart +++ b/lib/pages/sleep_report/component/WeekDataWidget.dart @@ -96,7 +96,7 @@ Widget WeekDataWidget( buildWeekDatesAndPoints(sleepReport['scoreList'])['colors'], tips: buildValueTexts(sleepReport['scoreList']['data'], '分', 1), xUnit: sleepReport['scoreList']['yUnit'], - barWidth: 0.1, + barWidth: 0.2, ), showLabel: sleepReport['scoreList']['type'], ), @@ -193,7 +193,7 @@ Widget WeekDataWidget( offset, textAlign: TextAlign.center, style: TextStyle( - color: Color(0xFFFFFFFF).withOpacity(0.06), + color: Color(0xFFFFFFFF).withOpacity(0.6), fontSize: 18.rpx), ); }, @@ -206,7 +206,7 @@ Widget WeekDataWidget( displayMode: ChartDisplayMode.dualBar, xUnit: sleepReport['csd']['yUnit'], tips: buildSleepValueTexts(sleepReport['csd']['data'], '小时', 1), - barWidth: 0.1, + barWidth: 0.2, ), showLabel: sleepReport['csd']['type'], ), diff --git a/lib/pages/sleep_report/component/WeekSleepScoreWidget.dart b/lib/pages/sleep_report/component/WeekSleepScoreWidget.dart index 41060b4..163c5d9 100644 --- a/lib/pages/sleep_report/component/WeekSleepScoreWidget.dart +++ b/lib/pages/sleep_report/component/WeekSleepScoreWidget.dart @@ -103,7 +103,7 @@ class AvgSleepScoreWidget extends StatelessWidget { height: 256.rpx, child: SegmentedCircleWithCenterWidget( segments: segments, - strokeWidth: 6.rpx, + strokeWidth: 12.rpx, gapAngle: 0, centerWidget: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -136,7 +136,7 @@ class AvgSleepScoreWidget extends StatelessWidget { runSpacing: 20.rpx, children: showLabel.map((item) { return Container( - padding: EdgeInsets.all(5), + padding: EdgeInsets.all(5.rpx), child: Row( mainAxisSize: MainAxisSize.min, children: [ diff --git a/lib/pages/sleep_report/new_sleep_report_page.dart b/lib/pages/sleep_report/new_sleep_report_page.dart index 22b1d65..b9ef331 100644 --- a/lib/pages/sleep_report/new_sleep_report_page.dart +++ b/lib/pages/sleep_report/new_sleep_report_page.dart @@ -1032,7 +1032,7 @@ class _NewSleepReportPageState extends State { ), ), Padding( - padding: EdgeInsets.symmetric(horizontal: 26.rpx), + padding: EdgeInsets.symmetric(horizontal: 20.rpx), child: Text( displayText, style: TextStyle( @@ -1079,46 +1079,91 @@ class _NewSleepReportPageState extends State { padding: EdgeInsets.zero, borderRadius: 8, onTap: () { - showSleepCalendarBottomSheet( - type: sleepReportController.model.type, - timestamp: selectedDate.millisecondsSinceEpoch, - context: context, - mac: widget.data['mac'], - onDateSelected: (newDate) { - sleepReportController.selectedDate.value = newDate; - calendarController.selectedDate.value = newDate; - String data = MyUtils.formatDate( - calendarController.selectedDate.value!); - requestWithLog( - logTitle: "查询睡眠报告", - method: MyHttpMethod.get, - queryUrl: - "https://sleepdata.he-info.com/api/analysis/sleep/analysis?mac=${widget.data['mac']}&time=${data}&type=${sleepReportController.model.type}", - onSuccess: (res) { - print(res); - sleepReportController.sleepReport.value = res.data; + sleepReportController.model.type == 3 + ? showMonthSelectionDialog(context, checkDate: selectedDate, + checkChange: (DateTime d) { + sleepReportController.selectedDate.value = d; + calendarController.selectedDate.value = d; + + String data = MyUtils.formatDate( + calendarController.selectedDate.value!); + requestWithLog( + logTitle: "查询睡眠报告", + method: MyHttpMethod.get, + queryUrl: + "https://sleepdata.he-info.com/api/analysis/sleep/analysis?mac=${widget.data['mac']}&time=${data}&type=${sleepReportController.model.type}", + onSuccess: (res) { + print(res); + sleepReportController.sleepReport.value = res.data; + sleepReportController.updateAll(); + }, + onFailure: (res) { + if (MainPageBBottomChange.getCurrentIndex() != + null) { + if (MainPageBBottomChange.getCurrentIndex() == + 1) { + TopSlideNotification.show(context, + text: res.msg!, + textColor: + themeController.currentColor.sc9); + } + } else { + TopSlideNotification.show(context, + text: res.msg!, + textColor: themeController.currentColor.sc9); + } + sleepReportController.sleepReport.value = {}; + sleepReportController.updateAll(); + print(res); + }); + sleepReportController.updateAll(); + calendarController.updateAll(); + }) + : showSleepCalendarBottomSheet( + type: sleepReportController.model.type, + timestamp: selectedDate.millisecondsSinceEpoch, + context: context, + mac: widget.data['mac'], + onDateSelected: (newDate) { + sleepReportController.selectedDate.value = newDate; + calendarController.selectedDate.value = newDate; + String data = MyUtils.formatDate( + calendarController.selectedDate.value!); + requestWithLog( + logTitle: "查询睡眠报告", + method: MyHttpMethod.get, + queryUrl: + "https://sleepdata.he-info.com/api/analysis/sleep/analysis?mac=${widget.data['mac']}&time=${data}&type=${sleepReportController.model.type}", + onSuccess: (res) { + print(res); + sleepReportController.sleepReport.value = + res.data; + sleepReportController.updateAll(); + }, + onFailure: (res) { + if (MainPageBBottomChange.getCurrentIndex() != + null) { + if (MainPageBBottomChange.getCurrentIndex() == + 1) { + TopSlideNotification.show(context, + text: res.msg!, + textColor: + themeController.currentColor.sc9); + } + } else { + TopSlideNotification.show(context, + text: res.msg!, + textColor: + themeController.currentColor.sc9); + } + sleepReportController.sleepReport.value = {}; + sleepReportController.updateAll(); + print(res); + }); sleepReportController.updateAll(); + calendarController.updateAll(); }, - onFailure: (res) { - if (MainPageBBottomChange.getCurrentIndex() != null) { - if (MainPageBBottomChange.getCurrentIndex() == 1) { - TopSlideNotification.show(context, - text: res.msg!, - textColor: themeController.currentColor.sc9); - } - } else { - TopSlideNotification.show(context, - text: res.msg!, - textColor: themeController.currentColor.sc9); - } - sleepReportController.sleepReport.value = {}; - sleepReportController.updateAll(); - print(res); - }); - sleepReportController.updateAll(); - calendarController.updateAll(); - }, - ); + ); }, child: Padding( padding: EdgeInsets.all(10.rpx),