|
...
|
...
|
@@ -165,11 +165,11 @@ class LocalHealthDataConvert { |
|
|
|
required List<HealthKitRawDataPoint> heartRate,
|
|
|
|
}) {
|
|
|
|
final daily = [
|
|
|
|
for (final day in days) _sleepResultForDay(day, sleepResults),
|
|
|
|
for (final day in days) sleepResultForDay(day, sleepResults),
|
|
|
|
];
|
|
|
|
final validSleep = daily.whereType<HealthRawSleepResult>().toList();
|
|
|
|
final previousDaily = [
|
|
|
|
for (final day in previousDays) _sleepResultForDay(day, sleepResults),
|
|
|
|
for (final day in previousDays) sleepResultForDay(day, sleepResults),
|
|
|
|
];
|
|
|
|
final previousValidSleep =
|
|
|
|
previousDaily.whereType<HealthRawSleepResult>().toList();
|
|
...
|
...
|
@@ -493,6 +493,7 @@ class LocalHealthDataConvert { |
|
|
|
required List<HealthKitRawDataPoint> sleepingHeartRate,
|
|
|
|
required List<HealthKitRawDataPoint> restingHeartRate,
|
|
|
|
required HealthRawSleepResult? sleepResult,
|
|
|
|
SleepTrendList? sleepTrend,
|
|
|
|
}) {
|
|
|
|
final activitySummary = _activityDaySummary(day, activity);
|
|
|
|
final dayStart = unixSeconds(day);
|
|
...
|
...
|
@@ -524,13 +525,26 @@ class LocalHealthDataConvert { |
|
|
|
exercise: activitySummary.exerciseSeconds.round(),
|
|
|
|
stand: activitySummary.standHours.round(),
|
|
|
|
steps: 0,
|
|
|
|
sleepDuration: sleepResult == null ? 0 : sleepResult.sleepMinutes * 60,
|
|
|
|
sleepScore: sleepResult?.sleepScore.toDouble(),
|
|
|
|
sleepState: sleepResult?.sleepStateValue,
|
|
|
|
sleepDuration: sleepTrend?.totalTime?.round() ??
|
|
|
|
sleepDurationSecondsFromResult(sleepResult),
|
|
|
|
sleepScore:
|
|
|
|
sleepTrend?.score?.toDouble() ?? sleepResult?.sleepScore.toDouble(),
|
|
|
|
sleepState:
|
|
|
|
sleepTrend?.sleepEvaluate?.round() ?? sleepResult?.sleepStateValue,
|
|
|
|
sleepTimeList: sleepTimeList,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int sleepDurationSecondsFromResult(HealthRawSleepResult? sleepResult) {
|
|
|
|
if (sleepResult == null ||
|
|
|
|
sleepResult.sleepScore <= 0 ||
|
|
|
|
sleepResult.sleepStateValue <= 0 ||
|
|
|
|
sleepResult.sleepMinutes <= 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return sleepResult.sleepMinutes * 60;
|
|
|
|
}
|
|
|
|
|
|
|
|
static V2HrvTrendData v2HrvTrendData(
|
|
|
|
List<HealthRawHrvStressPoint> hrvPoints,
|
|
|
|
) {
|
|
...
|
...
|
@@ -624,23 +638,6 @@ class LocalHealthDataConvert { |
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HealthRawHrvStressPoint? _previousHrvPoint({
|
|
|
|
required HealthRawHrvStressPoint? latest,
|
|
|
|
required List<HealthRawHrvStressPoint> hrvPoints,
|
|
|
|
required List<HealthRawHrvStressPoint> previousHrvPoints,
|
|
|
|
}) {
|
|
|
|
if (latest == null) return null;
|
|
|
|
return [...previousHrvPoints, ...hrvPoints]
|
|
|
|
.where((item) => item.rawEndTime < latest.rawEndTime)
|
|
|
|
.fold<HealthRawHrvStressPoint?>(
|
|
|
|
null,
|
|
|
|
(previous, item) =>
|
|
|
|
previous == null || item.rawEndTime > previous.rawEndTime
|
|
|
|
? item
|
|
|
|
: previous,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
static String? _latestHrvTip({required HealthRawHrvStressPoint? latest}) {
|
|
|
|
if (latest == null) return null;
|
|
|
|
|
|
...
|
...
|
@@ -1079,7 +1076,7 @@ class LocalHealthDataConvert { |
|
|
|
.toList();
|
|
|
|
}
|
|
|
|
|
|
|
|
static HealthRawSleepResult? _sleepResultForDay(
|
|
|
|
static HealthRawSleepResult? sleepResultForDay(
|
|
|
|
DateTime day,
|
|
|
|
List<HealthRawSleepResult> sleepResults,
|
|
|
|
) {
|
...
|
...
|
|