|
@@ -316,16 +316,27 @@ class LocalHealthDataConvert { |
|
@@ -316,16 +316,27 @@ class LocalHealthDataConvert { |
|
316
|
required List<DateTime> previousDays,
|
316
|
required List<DateTime> previousDays,
|
|
317
|
required List<HealthRawHrvStressPoint> hrvPoints,
|
317
|
required List<HealthRawHrvStressPoint> hrvPoints,
|
|
318
|
required List<HealthRawDailyStressPoint> dailyStressPoints,
|
318
|
required List<HealthRawDailyStressPoint> dailyStressPoints,
|
|
|
|
319
|
+ required List<HealthKitRawDataPoint> restingHeartRate,
|
|
319
|
}) {
|
320
|
}) {
|
|
320
|
final daily = <_HrvDaySummary>[];
|
321
|
final daily = <_HrvDaySummary>[];
|
|
321
|
for (final day in days) {
|
322
|
for (final day in days) {
|
|
322
|
- final summary = _hrvDaySummary(day, hrvPoints, dailyStressPoints);
|
323
|
+ final summary = _hrvDaySummary(
|
|
|
|
324
|
+ day,
|
|
|
|
325
|
+ hrvPoints,
|
|
|
|
326
|
+ dailyStressPoints,
|
|
|
|
327
|
+ restingHeartRate,
|
|
|
|
328
|
+ );
|
|
323
|
if (summary.hasData) daily.add(summary);
|
329
|
if (summary.hasData) daily.add(summary);
|
|
324
|
}
|
330
|
}
|
|
325
|
final validDaily = daily.where((e) => e.hrvAverage != null).toList();
|
331
|
final validDaily = daily.where((e) => e.hrvAverage != null).toList();
|
|
326
|
final previousDaily = <_HrvDaySummary>[];
|
332
|
final previousDaily = <_HrvDaySummary>[];
|
|
327
|
for (final day in previousDays) {
|
333
|
for (final day in previousDays) {
|
|
328
|
- final summary = _hrvDaySummary(day, hrvPoints, dailyStressPoints);
|
334
|
+ final summary = _hrvDaySummary(
|
|
|
|
335
|
+ day,
|
|
|
|
336
|
+ hrvPoints,
|
|
|
|
337
|
+ dailyStressPoints,
|
|
|
|
338
|
+ const <HealthKitRawDataPoint>[],
|
|
|
|
339
|
+ );
|
|
329
|
if (summary.hasData) previousDaily.add(summary);
|
340
|
if (summary.hasData) previousDaily.add(summary);
|
|
330
|
}
|
341
|
}
|
|
331
|
final trendList = dateRangeType == 2
|
342
|
final trendList = dateRangeType == 2
|
|
@@ -336,6 +347,7 @@ class LocalHealthDataConvert { |
|
@@ -336,6 +347,7 @@ class LocalHealthDataConvert { |
|
336
|
timeKey: dateKey(item.day),
|
347
|
timeKey: dateKey(item.day),
|
|
337
|
hrvAverage: item.hrvAverage,
|
348
|
hrvAverage: item.hrvAverage,
|
|
338
|
hrAverage: item.hrAverage,
|
349
|
hrAverage: item.hrAverage,
|
|
|
|
350
|
+ lastRestingHrValue: item.lastRestingHrValue,
|
|
339
|
comprehensiveStressScore: item.comprehensiveStressScore,
|
351
|
comprehensiveStressScore: item.comprehensiveStressScore,
|
|
340
|
state: item.state,
|
352
|
state: item.state,
|
|
341
|
),
|
353
|
),
|
|
@@ -528,9 +540,7 @@ class LocalHealthDataConvert { |
|
@@ -528,9 +540,7 @@ class LocalHealthDataConvert { |
|
528
|
latestHrv: (latest?.result ?? 0).floor().toDouble(),
|
540
|
latestHrv: (latest?.result ?? 0).floor().toDouble(),
|
|
529
|
latestDataTime: latest?.rawEndTime,
|
541
|
latestDataTime: latest?.rawEndTime,
|
|
530
|
state: latest?.state.value,
|
542
|
state: latest?.state.value,
|
|
531
|
- tip: _latestHrvTip(
|
|
|
|
532
|
- latest: latest
|
|
|
|
533
|
- ),
|
543
|
+ tip: _latestHrvTip(latest: latest),
|
|
534
|
);
|
544
|
);
|
|
535
|
}
|
545
|
}
|
|
536
|
|
546
|
|
|
@@ -617,9 +627,7 @@ class LocalHealthDataConvert { |
|
@@ -617,9 +627,7 @@ class LocalHealthDataConvert { |
|
617
|
);
|
627
|
);
|
|
618
|
}
|
628
|
}
|
|
619
|
|
629
|
|
|
620
|
- static String? _latestHrvTip({
|
|
|
|
621
|
- required HealthRawHrvStressPoint? latest
|
|
|
|
622
|
- }) {
|
630
|
+ static String? _latestHrvTip({required HealthRawHrvStressPoint? latest}) {
|
|
623
|
if (latest == null) return null;
|
631
|
if (latest == null) return null;
|
|
624
|
|
632
|
|
|
625
|
final isAboveBaseline = latest.result >= latest.baselineHrv;
|
633
|
final isAboveBaseline = latest.result >= latest.baselineHrv;
|
|
@@ -696,17 +704,24 @@ class LocalHealthDataConvert { |
|
@@ -696,17 +704,24 @@ class LocalHealthDataConvert { |
|
696
|
DateTime day,
|
704
|
DateTime day,
|
|
697
|
List<HealthRawHrvStressPoint> hrv,
|
705
|
List<HealthRawHrvStressPoint> hrv,
|
|
698
|
List<HealthRawDailyStressPoint> dailyStress,
|
706
|
List<HealthRawDailyStressPoint> dailyStress,
|
|
|
|
707
|
+ List<HealthKitRawDataPoint> restingHeartRate,
|
|
699
|
) {
|
708
|
) {
|
|
700
|
final start = unixSeconds(day);
|
709
|
final start = unixSeconds(day);
|
|
701
|
final end = unixSeconds(day.add(const Duration(days: 1)));
|
710
|
final end = unixSeconds(day.add(const Duration(days: 1)));
|
|
702
|
final dayHrv =
|
711
|
final dayHrv =
|
|
703
|
hrv.where((e) => e.rawEndTime >= start && e.rawEndTime < end).toList();
|
712
|
hrv.where((e) => e.rawEndTime >= start && e.rawEndTime < end).toList();
|
|
|
|
713
|
+ final dayRestingHr = restingHeartRate
|
|
|
|
714
|
+ .where((e) => e.endTime >= start && e.endTime < end)
|
|
|
|
715
|
+ .toList()
|
|
|
|
716
|
+ ..sort((a, b) => a.endTime.compareTo(b.endTime));
|
|
704
|
final stress = _dailyStressPointForDay(day, dailyStress);
|
717
|
final stress = _dailyStressPointForDay(day, dailyStress);
|
|
705
|
final hrvAverage = _averageOrNull(dayHrv.map((e) => e.result).toList());
|
718
|
final hrvAverage = _averageOrNull(dayHrv.map((e) => e.result).toList());
|
|
706
|
return _HrvDaySummary(
|
719
|
return _HrvDaySummary(
|
|
707
|
day: day,
|
720
|
day: day,
|
|
708
|
hrvAverage: hrvAverage?.toDouble(),
|
721
|
hrvAverage: hrvAverage?.toDouble(),
|
|
709
|
hrAverage: stress?.stressScore.toDouble(),
|
722
|
hrAverage: stress?.stressScore.toDouble(),
|
|
|
|
723
|
+ lastRestingHrValue:
|
|
|
|
724
|
+ dayRestingHr.isEmpty ? null : dayRestingHr.last.value?.floor(),
|
|
710
|
comprehensiveStressScore: stress?.stressScore.toDouble(),
|
725
|
comprehensiveStressScore: stress?.stressScore.toDouble(),
|
|
711
|
state: stress?.state.value,
|
726
|
state: stress?.state.value,
|
|
712
|
);
|
727
|
);
|
|
@@ -1019,6 +1034,7 @@ class _HrvDaySummary { |
|
@@ -1019,6 +1034,7 @@ class _HrvDaySummary { |
|
1019
|
required this.day,
|
1034
|
required this.day,
|
|
1020
|
required this.hrvAverage,
|
1035
|
required this.hrvAverage,
|
|
1021
|
required this.hrAverage,
|
1036
|
required this.hrAverage,
|
|
|
|
1037
|
+ required this.lastRestingHrValue,
|
|
1022
|
required this.comprehensiveStressScore,
|
1038
|
required this.comprehensiveStressScore,
|
|
1023
|
required this.state,
|
1039
|
required this.state,
|
|
1024
|
});
|
1040
|
});
|
|
@@ -1026,6 +1042,7 @@ class _HrvDaySummary { |
|
@@ -1026,6 +1042,7 @@ class _HrvDaySummary { |
|
1026
|
final DateTime day;
|
1042
|
final DateTime day;
|
|
1027
|
final double? hrvAverage;
|
1043
|
final double? hrvAverage;
|
|
1028
|
final double? hrAverage;
|
1044
|
final double? hrAverage;
|
|
|
|
1045
|
+ final int? lastRestingHrValue;
|
|
1029
|
final double? comprehensiveStressScore;
|
1046
|
final double? comprehensiveStressScore;
|
|
1030
|
final int? state;
|
1047
|
final int? state;
|
|
1031
|
|
1048
|
|