diff --git a/lib/pages/sleep_report/component/MonthDataWidget.dart b/lib/pages/sleep_report/component/MonthDataWidget.dart index 4926512..c57a45f 100644 --- a/lib/pages/sleep_report/component/MonthDataWidget.dart +++ b/lib/pages/sleep_report/component/MonthDataWidget.dart @@ -77,7 +77,7 @@ Widget MonthDataWidget( }, ), ], - tips: buildValueTexts(sleepReport['scoreList']['data'], '分'.tr, 1), + tips: buildValueTexts(sleepReport['scoreList']['data'], null, 1), xCount: buildMonthlyChartData(sleepReport['scoreList'])['daysInMonth'] .toInt(), yCount: sleepReport['scoreList']['yLable'].length, @@ -547,27 +547,59 @@ Widget MonthDataWidget( ); } +// List buildValueTexts( +// List data, +// String? unit, +// int direction, // 0 表示左侧,1 表示右侧 +// ) { +// if (data.isEmpty) return []; + +// return data +// .where((item) => item.containsKey('value') && item.containsKey('st')) +// .map((item) { +// final val = item['value'].toString(); + +// // 单位位置 +// final prefix = direction == 1 ? '' : unit; +// final suffix = direction == 1 ? unit : ''; + +// // 中文年月日格式 +// DateTime date = DateTime.fromMillisecondsSinceEpoch(item['st']); +// final dateStr = "${date.year}/${date.month}/${date.day}"; + +// return "$prefix$val$suffix\n$dateStr"; +// }).toList(); +// } + List buildValueTexts( List data, - String unit, - int direction, // 0 表示左侧,1 表示右侧 + String? unit, + int direction, // 0 左侧,1 右侧 ) { if (data.isEmpty) return []; + final safeUnit = unit ?? ""; // 防止 null + return data - .where((item) => item.containsKey('value') && item.containsKey('st')) + .where((item) => + item is Map && item.containsKey('value') && item.containsKey('st')) .map((item) { final val = item['value'].toString(); - // 单位位置 - final prefix = direction == 1 ? '' : unit; - final suffix = direction == 1 ? unit : ''; + // ✅ 如果单位为空,不拼接单位 + final prefix = safeUnit.isEmpty ? '' : (direction == 0 ? safeUnit : ''); + final suffix = safeUnit.isEmpty ? '' : (direction == 1 ? safeUnit : ''); - // 中文年月日格式 - DateTime date = DateTime.fromMillisecondsSinceEpoch(item['st']); - final dateStr = "${date.year}/${date.month}/${date.day}"; + // ✅ 处理时间戳 + final ts = item['st']; + String dateStr = ''; + if (ts != null && ts is int && ts > 0) { + final date = DateTime.fromMillisecondsSinceEpoch(ts); + // 格式化为 yyyy/MM/dd + dateStr = "${date.year}/${date.month}/${date.day}"; + } - return "$prefix$val$suffix\n$dateStr"; + return "$prefix$val$suffix${dateStr.isNotEmpty ? '\n$dateStr' : ''}"; }).toList(); } diff --git a/lib/pages/sleep_report/component/WeekDataWidget.dart b/lib/pages/sleep_report/component/WeekDataWidget.dart index aed6d26..4078b8f 100644 --- a/lib/pages/sleep_report/component/WeekDataWidget.dart +++ b/lib/pages/sleep_report/component/WeekDataWidget.dart @@ -104,7 +104,7 @@ Widget WeekDataWidget( displayMode: ChartDisplayMode.bar, barColors: buildWeekDatesAndPoints(sleepReport['scoreList'])['colors'], - tips: buildValueTexts(sleepReport['scoreList']['data'], '分'.tr, 1), + tips: buildValueTexts(sleepReport['scoreList']['data'], null, 1), xUnit: sleepReport['scoreList']['yUnit'], barWidth: 0.2, ), @@ -705,16 +705,31 @@ double getYPositionBySegmentedLabels(List labels, double value) { } //关键点标签 +// List buildValueTexts( +// List data, +// String unit, +// int direction, // 0 表示左侧,1 表示右侧 +// ) { +// if (data.isEmpty) return []; +// return data.where((item) => item.containsKey('value')).map((item) { +// final val = item['value'].toString(); +// return direction == 1 ? "$val$unit" : "$unit$val"; +// }).toList(); +// } List buildValueTexts( List data, - String unit, + String? unit, // ✅ unit 改为可空类型 int direction, // 0 表示左侧,1 表示右侧 ) { if (data.isEmpty) return []; + final safeUnit = unit ?? ""; // ✅ 防止 null + return data.where((item) => item.containsKey('value')).map((item) { final val = item['value'].toString(); - return direction == 1 ? "$val$unit" : "$unit$val"; + // ✅ 只有当 unit 不为空时才拼接 + if (safeUnit.isEmpty) return val; + return direction == 1 ? "$val$safeUnit" : "$safeUnit$val"; }).toList(); } diff --git a/lib/pages/sleep_report/new_sleep_report_page.dart b/lib/pages/sleep_report/new_sleep_report_page.dart index 0b8b06a..87ceec3 100644 --- a/lib/pages/sleep_report/new_sleep_report_page.dart +++ b/lib/pages/sleep_report/new_sleep_report_page.dart @@ -52,6 +52,17 @@ class _NewSleepReportPageState extends State { } } + @override + void dispose() { + super.dispose(); + Future.microtask(() { + if (Get.isRegistered()) { + sleepReportController.isLoading.value = false; + sleepReportController.sleepReport.value = {}; + } + }); + } + @override void initState() { super.initState(); @@ -69,7 +80,7 @@ class _NewSleepReportPageState extends State { // ✅ 延迟执行赋值逻辑 WidgetsBinding.instance.addPostFrameCallback((_) { final selected = DateTime.fromMillisecondsSinceEpoch(widget.data['date']); - + sleepReportController.isLoading.value = true; calendarController.selectedDate.value = selected; sleepReportController.selectedDate.value = selected; @@ -111,11 +122,6 @@ class _NewSleepReportPageState extends State { }); } - @override - void dispose() { - super.dispose(); - } - @override Widget build(BuildContext context) { Future.microtask(() {