更新睡眠报告

This commit is contained in:
wyf
2025-05-28 21:14:04 +08:00
parent 98cd7f4e6a
commit b34737dbe8
46 changed files with 1580 additions and 974 deletions

View File

@@ -46,13 +46,52 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
final endTime = widget.sleepReport['endTime'];
List<Map<String, dynamic>> data =
(widget.sleepReport['hrbc'] as List).cast<Map<String, dynamic>>();
final dataPoints = data.map((item) {
final x = item['st'] as int;
final y = (item['value'] as num).toDouble(); // 安全地转换为 double
return TimeSeriesPoint(x, y);
}).toList();
final dataPoints = data.map((item) {
final x = item['st'] as int;
final y = (item['value'] as num).toDouble(); // 安全地转换为 double
return TimeSeriesPoint(x, y);
}).toList();
List<Map<String, dynamic>> hrs =
(widget.sleepReport['hrs'] as List).cast<Map<String, dynamic>>();
//206 平均心率
//202 基准心率
//207 最低心率
//208 最高心率
// 找 id == 206 的元素(平均心率)
Map<String, dynamic>? avgHeartRate = hrs.firstWhere(
(element) => element['id'] == 206,
orElse: () => {},
);
// 找 id == 202 的元素(基准心率)
Map<String, dynamic>? baseHeartRate = hrs.firstWhere(
(element) => element['id'] == 202,
orElse: () => {},
);
// 找 id == 207 的元素(最低心率)
Map<String, dynamic>? minHeartRate = hrs.firstWhere(
(element) => element['id'] == 207,
orElse: () => {},
);
// 找 id == 208 的元素(最高心率)
Map<String, dynamic>? maxHeartRate = hrs.firstWhere(
(element) => element['id'] == 208,
orElse: () => {},
);
String range = baseHeartRate['range'] ?? '';
int min = 0;
int max = 0;
if (range.isNotEmpty && range.contains('~')) {
List<String> parts = range.split('~');
if (parts.length == 2) {
min = int.tryParse(parts[0]) ?? 0;
max = int.tryParse(parts[1]) ?? 0;
}
}
return Container(
width: double.infinity,
decoration: BoxDecoration(
@@ -70,7 +109,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"心率基准".tr,
"心率数据".tr,
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize: AppConstants().title_text_fontSize),
@@ -86,7 +125,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
context,
Container(
child: Text(
"心率基准介绍".tr,
"心率数据介绍".tr,
style: TextStyle(
fontSize: 26.rpx,
color: themeController.currentColor.sc3,
@@ -133,7 +172,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
SizedBox(width: 15.rpx), // 圆球和文字之间的间隔
// 文字
Text(
'正常范围(50~80)',
'正常范围'.tr + "${range}",
style: TextStyle(
fontSize:
AppConstants().smaller_text_fontSize, // 文字的大小
@@ -142,6 +181,18 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
),
],
),
// Container(
// // color: Colors.red,
// width: double.infinity,
// // height: 300.rpx,
// child: TimeSeriesChart(
// startTime: startTime,
// endTime: endTime,
// yMin: min.toDouble(),
// yMax: max.toDouble(),
// dataPoints: dataPoints,
// ),
// ),
Container(
// color: Colors.red,
width: double.infinity,
@@ -152,6 +203,8 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
yMin: 50,
yMax: 150,
dataPoints: dataPoints,
actYMin: min.toDouble(),
actYMax: max.toDouble(),
),
),
Padding(
@@ -163,7 +216,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
Column(
children: [
Text(
"平均心率",
"${avgHeartRate['name']}",
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize:
@@ -173,14 +226,14 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
"89",
"${avgHeartRate['value']}",
style: TextStyle(
color: themeController.currentColor.sc2,
fontSize:
AppConstants().normal_text_fontSize),
),
Text(
"次/分钟",
"${avgHeartRate['unit']}",
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize:
@@ -195,7 +248,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
Column(
children: [
Text(
"基准心率",
"${baseHeartRate['name']}",
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize:
@@ -207,7 +260,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
"80",
"${baseHeartRate['value']}",
style: TextStyle(
color: themeController.currentColor.sc2,
fontSize:
@@ -216,7 +269,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
overflow: TextOverflow.ellipsis,
),
Text(
"次/分钟",
"${baseHeartRate['unit']}",
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize:
@@ -233,7 +286,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
Column(
children: [
Text(
"最低心率",
"${minHeartRate['name']}",
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize:
@@ -245,7 +298,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
"68",
"${minHeartRate['value']}",
style: TextStyle(
color: themeController.currentColor.sc2,
fontSize:
@@ -254,7 +307,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
overflow: TextOverflow.ellipsis,
),
Text(
"次/分钟",
"${minHeartRate['unit']}",
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize:
@@ -271,7 +324,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
Column(
children: [
Text(
"最高心率",
"${maxHeartRate['name']}",
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize:
@@ -283,7 +336,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
"98",
"${maxHeartRate['value']}",
style: TextStyle(
color: themeController.currentColor.sc2,
fontSize:
@@ -292,7 +345,7 @@ class _HeartRateStandardWidgetState extends State<HeartRateStandardWidget> {
overflow: TextOverflow.ellipsis,
),
Text(
"次/分钟",
"${maxHeartRate['unit']}",
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize: