睡眠报告多次点击查询 显示bug

This commit is contained in:
czz
2025-10-14 16:41:52 +08:00
parent d7f1b78404
commit 6b0f422fa4
3 changed files with 73 additions and 20 deletions

View File

@@ -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'] xCount: buildMonthlyChartData(sleepReport['scoreList'])['daysInMonth']
.toInt(), .toInt(),
yCount: sleepReport['scoreList']['yLable'].length, yCount: sleepReport['scoreList']['yLable'].length,
@@ -547,27 +547,59 @@ Widget MonthDataWidget(
); );
} }
// List<String> buildValueTexts(
// List<dynamic> 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<String> buildValueTexts( List<String> buildValueTexts(
List<dynamic> data, List<dynamic> data,
String unit, String? unit,
int direction, // 0 表示左侧1 表示右侧 int direction, // 0 左侧1 右侧
) { ) {
if (data.isEmpty) return []; if (data.isEmpty) return [];
final safeUnit = unit ?? ""; // 防止 null
return data return data
.where((item) => item.containsKey('value') && item.containsKey('st')) .where((item) =>
item is Map && item.containsKey('value') && item.containsKey('st'))
.map((item) { .map((item) {
final val = item['value'].toString(); final val = item['value'].toString();
// 单位位置 // ✅ 如果单位为空,不拼接单位
final prefix = direction == 1 ? '' : unit; final prefix = safeUnit.isEmpty ? '' : (direction == 0 ? safeUnit : '');
final suffix = direction == 1 ? unit : ''; final suffix = safeUnit.isEmpty ? '' : (direction == 1 ? safeUnit : '');
// 中文年月日格式 // ✅ 处理时间戳
DateTime date = DateTime.fromMillisecondsSinceEpoch(item['st']); final ts = item['st'];
final dateStr = "${date.year}/${date.month}/${date.day}"; 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(); }).toList();
} }

View File

@@ -104,7 +104,7 @@ Widget WeekDataWidget(
displayMode: ChartDisplayMode.bar, displayMode: ChartDisplayMode.bar,
barColors: barColors:
buildWeekDatesAndPoints(sleepReport['scoreList'])['colors'], buildWeekDatesAndPoints(sleepReport['scoreList'])['colors'],
tips: buildValueTexts(sleepReport['scoreList']['data'], ''.tr, 1), tips: buildValueTexts(sleepReport['scoreList']['data'], null, 1),
xUnit: sleepReport['scoreList']['yUnit'], xUnit: sleepReport['scoreList']['yUnit'],
barWidth: 0.2, barWidth: 0.2,
), ),
@@ -705,16 +705,31 @@ double getYPositionBySegmentedLabels(List<double> labels, double value) {
} }
//关键点标签 //关键点标签
// List<String> buildValueTexts(
// List<dynamic> 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<String> buildValueTexts( List<String> buildValueTexts(
List<dynamic> data, List<dynamic> data,
String unit, String? unit, // ✅ unit 改为可空类型
int direction, // 0 表示左侧1 表示右侧 int direction, // 0 表示左侧1 表示右侧
) { ) {
if (data.isEmpty) return []; if (data.isEmpty) return [];
final safeUnit = unit ?? ""; // ✅ 防止 null
return data.where((item) => item.containsKey('value')).map((item) { return data.where((item) => item.containsKey('value')).map((item) {
final val = item['value'].toString(); 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(); }).toList();
} }

View File

@@ -52,6 +52,17 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
} }
} }
@override
void dispose() {
super.dispose();
Future.microtask(() {
if (Get.isRegistered<SleepReportController>()) {
sleepReportController.isLoading.value = false;
sleepReportController.sleepReport.value = {};
}
});
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@@ -69,7 +80,7 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
// ✅ 延迟执行赋值逻辑 // ✅ 延迟执行赋值逻辑
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
final selected = DateTime.fromMillisecondsSinceEpoch(widget.data['date']); final selected = DateTime.fromMillisecondsSinceEpoch(widget.data['date']);
sleepReportController.isLoading.value = true;
calendarController.selectedDate.value = selected; calendarController.selectedDate.value = selected;
sleepReportController.selectedDate.value = selected; sleepReportController.selectedDate.value = selected;
@@ -111,11 +122,6 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
}); });
} }
@override
void dispose() {
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Future.microtask(() { Future.microtask(() {