Commit 13f762a6cd9fa6b8071673a18b3f9ab4586cf991

Authored by 刘宏哲
1 parent 919fba7f

feat(app): hrv年视图,压力最大、最小逻辑调整

... ... @@ -22,7 +22,8 @@ class UserInformationView extends StatelessWidget {
const Divider(height: 1, color: Color(0x66CCCCCC)),
_InfoRow(label: 'nickname', value: userInfo?.nickname ?? ''),
const Divider(height: 1, color: Color(0x66CCCCCC)),
_InfoRow(label: 'access token', value: preferences.accessToken),
_InfoRow(label: 'accessToken', value: preferences.accessToken),
_InfoRow(label: 'uniqueCode', value: userInfo?.uniqueCode ?? ''),
],
);
}),
... ...
... ... @@ -400,70 +400,38 @@ class YearlyHrvReport implements HrvPeriodReport {
];
({List<int> mostStressed, List<int> leastStressed}) stressExtremeMonths() {
final values = [
for (final month in monthsWithLevel)
if (levelForMonth(month) case final level?) MapEntry(month, level),
];
values.sort(_compareByStressDescending);
final mostStressed = <int>[];
final leastStressed = <int>[];
if (values.isEmpty) {
return (mostStressed: mostStressed, leastStressed: leastStressed);
}
if (values.length == 1) {
final entry = values.single;
if (_isStressedLevel(entry.value)) {
mostStressed.add(entry.key);
} else {
leastStressed.add(entry.key);
}
return (mostStressed: mostStressed, leastStressed: leastStressed);
}
mostStressed.add(values.first.key);
leastStressed.add(values.last.key);
if (values.length == 3) {
final middle = values[1];
if (_isStressedLevel(middle.value)) {
mostStressed.add(middle.key);
final stressedValues = <MapEntry<int, double>>[];
final relaxedValues = <MapEntry<int, double>>[];
for (var month = 1; month <= 12; month++) {
final average = averageForMonth(month);
final level = levelForMonth(month);
if (average == null || level == null) continue;
final entry = MapEntry(month, average);
if (level == HrvStressLevel.attention ||
level == HrvStressLevel.overload) {
stressedValues.add(entry);
} else {
leastStressed.add(middle.key);
relaxedValues.add(entry);
}
} else if (values.length >= 4) {
mostStressed.add(values[1].key);
leastStressed.add(values[values.length - 2].key);
}
mostStressed.sort();
leastStressed.sort();
return (mostStressed: mostStressed, leastStressed: leastStressed);
}
int _compareByStressDescending(
MapEntry<int, HrvStressLevel> a,
MapEntry<int, HrvStressLevel> b,
) {
final valueComparison = _stressRank(b.value).compareTo(
_stressRank(a.value),
return (
mostStressed: _selectMonthsByHrv(stressedValues, lowestFirst: true),
leastStressed: _selectMonthsByHrv(relaxedValues, lowestFirst: false),
);
return valueComparison == 0 ? a.key.compareTo(b.key) : valueComparison;
}
bool _isStressedLevel(HrvStressLevel level) {
return level == HrvStressLevel.attention ||
level == HrvStressLevel.overload;
}
int _stressRank(HrvStressLevel level) {
return switch (level) {
HrvStressLevel.overload => 3,
HrvStressLevel.attention => 2,
HrvStressLevel.normal => 1,
HrvStressLevel.excellent => 0,
};
List<int> _selectMonthsByHrv(
List<MapEntry<int, double>> values, {
required bool lowestFirst,
}) {
values.sort((a, b) {
final valueComparison = lowestFirst
? a.value.compareTo(b.value)
: b.value.compareTo(a.value);
return valueComparison == 0 ? a.key.compareTo(b.key) : valueComparison;
});
return values.take(2).map((entry) => entry.key).toList()..sort();
}
List<int> monthsAtExtreme({required bool maximum}) {
... ...
... ... @@ -49,12 +49,12 @@ class PrivacySettingsController extends GetxController {
isUpdatingEnableAddWithUCode.value = true;
try {
final result = await _userApi.updateOwnerUserInfo(
enableAddWithUcode: enabled ? 1 : 0,
enableAddWithUcode: enabled ? 0 : 1,
);
if (result is AppSuccess<UserInfoResponse>) {
await _userPreferencesStorage.updateMeUserInfo(result.data);
enableAddWithUCode.value = result.data.enableAddWithUCode == null
? enabled
? !enabled
: result.data.enableAddWithUCode == 1;
}
} finally {
... ...
... ... @@ -126,7 +126,7 @@ class PrivacySettingsView extends GetView<PrivacySettingsController> {
scaleX: 52 / 51,
scaleY: 28 / 31,
child: CupertinoSwitch(
value: value.value,
value: !value.value,
activeTrackColor: AppColors.primary,
inactiveTrackColor: const Color(0xFFE5E5EA),
onChanged: onChanged(),
... ...