Commit 13f762a6cd9fa6b8071673a18b3f9ab4586cf991

Authored by 刘宏哲
1 parent 919fba7f

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

@@ -22,7 +22,8 @@ class UserInformationView extends StatelessWidget { @@ -22,7 +22,8 @@ class UserInformationView extends StatelessWidget {
22 const Divider(height: 1, color: Color(0x66CCCCCC)), 22 const Divider(height: 1, color: Color(0x66CCCCCC)),
23 _InfoRow(label: 'nickname', value: userInfo?.nickname ?? ''), 23 _InfoRow(label: 'nickname', value: userInfo?.nickname ?? ''),
24 const Divider(height: 1, color: Color(0x66CCCCCC)), 24 const Divider(height: 1, color: Color(0x66CCCCCC)),
25 - _InfoRow(label: 'access token', value: preferences.accessToken), 25 + _InfoRow(label: 'accessToken', value: preferences.accessToken),
  26 + _InfoRow(label: 'uniqueCode', value: userInfo?.uniqueCode ?? ''),
26 ], 27 ],
27 ); 28 );
28 }), 29 }),
@@ -400,70 +400,38 @@ class YearlyHrvReport implements HrvPeriodReport { @@ -400,70 +400,38 @@ class YearlyHrvReport implements HrvPeriodReport {
400 ]; 400 ];
401 401
402 ({List<int> mostStressed, List<int> leastStressed}) stressExtremeMonths() { 402 ({List<int> mostStressed, List<int> leastStressed}) stressExtremeMonths() {
403 - final values = [  
404 - for (final month in monthsWithLevel)  
405 - if (levelForMonth(month) case final level?) MapEntry(month, level),  
406 - ];  
407 - values.sort(_compareByStressDescending);  
408 -  
409 - final mostStressed = <int>[];  
410 - final leastStressed = <int>[];  
411 - if (values.isEmpty) {  
412 - return (mostStressed: mostStressed, leastStressed: leastStressed);  
413 - }  
414 -  
415 - if (values.length == 1) {  
416 - final entry = values.single;  
417 - if (_isStressedLevel(entry.value)) {  
418 - mostStressed.add(entry.key);  
419 - } else {  
420 - leastStressed.add(entry.key);  
421 - }  
422 - return (mostStressed: mostStressed, leastStressed: leastStressed);  
423 - }  
424 -  
425 - mostStressed.add(values.first.key);  
426 - leastStressed.add(values.last.key);  
427 -  
428 - if (values.length == 3) {  
429 - final middle = values[1];  
430 - if (_isStressedLevel(middle.value)) {  
431 - mostStressed.add(middle.key); 403 + final stressedValues = <MapEntry<int, double>>[];
  404 + final relaxedValues = <MapEntry<int, double>>[];
  405 + for (var month = 1; month <= 12; month++) {
  406 + final average = averageForMonth(month);
  407 + final level = levelForMonth(month);
  408 + if (average == null || level == null) continue;
  409 + final entry = MapEntry(month, average);
  410 + if (level == HrvStressLevel.attention ||
  411 + level == HrvStressLevel.overload) {
  412 + stressedValues.add(entry);
432 } else { 413 } else {
433 - leastStressed.add(middle.key); 414 + relaxedValues.add(entry);
434 } 415 }
435 - } else if (values.length >= 4) {  
436 - mostStressed.add(values[1].key);  
437 - leastStressed.add(values[values.length - 2].key);  
438 } 416 }
439 417
440 - mostStressed.sort();  
441 - leastStressed.sort();  
442 - return (mostStressed: mostStressed, leastStressed: leastStressed);  
443 - }  
444 -  
445 - int _compareByStressDescending(  
446 - MapEntry<int, HrvStressLevel> a,  
447 - MapEntry<int, HrvStressLevel> b,  
448 - ) {  
449 - final valueComparison = _stressRank(b.value).compareTo(  
450 - _stressRank(a.value), 418 + return (
  419 + mostStressed: _selectMonthsByHrv(stressedValues, lowestFirst: true),
  420 + leastStressed: _selectMonthsByHrv(relaxedValues, lowestFirst: false),
451 ); 421 );
452 - return valueComparison == 0 ? a.key.compareTo(b.key) : valueComparison;  
453 - }  
454 -  
455 - bool _isStressedLevel(HrvStressLevel level) {  
456 - return level == HrvStressLevel.attention ||  
457 - level == HrvStressLevel.overload;  
458 } 422 }
459 423
460 - int _stressRank(HrvStressLevel level) {  
461 - return switch (level) {  
462 - HrvStressLevel.overload => 3,  
463 - HrvStressLevel.attention => 2,  
464 - HrvStressLevel.normal => 1,  
465 - HrvStressLevel.excellent => 0,  
466 - }; 424 + List<int> _selectMonthsByHrv(
  425 + List<MapEntry<int, double>> values, {
  426 + required bool lowestFirst,
  427 + }) {
  428 + values.sort((a, b) {
  429 + final valueComparison = lowestFirst
  430 + ? a.value.compareTo(b.value)
  431 + : b.value.compareTo(a.value);
  432 + return valueComparison == 0 ? a.key.compareTo(b.key) : valueComparison;
  433 + });
  434 + return values.take(2).map((entry) => entry.key).toList()..sort();
467 } 435 }
468 436
469 List<int> monthsAtExtreme({required bool maximum}) { 437 List<int> monthsAtExtreme({required bool maximum}) {
@@ -49,12 +49,12 @@ class PrivacySettingsController extends GetxController { @@ -49,12 +49,12 @@ class PrivacySettingsController extends GetxController {
49 isUpdatingEnableAddWithUCode.value = true; 49 isUpdatingEnableAddWithUCode.value = true;
50 try { 50 try {
51 final result = await _userApi.updateOwnerUserInfo( 51 final result = await _userApi.updateOwnerUserInfo(
52 - enableAddWithUcode: enabled ? 1 : 0, 52 + enableAddWithUcode: enabled ? 0 : 1,
53 ); 53 );
54 if (result is AppSuccess<UserInfoResponse>) { 54 if (result is AppSuccess<UserInfoResponse>) {
55 await _userPreferencesStorage.updateMeUserInfo(result.data); 55 await _userPreferencesStorage.updateMeUserInfo(result.data);
56 enableAddWithUCode.value = result.data.enableAddWithUCode == null 56 enableAddWithUCode.value = result.data.enableAddWithUCode == null
57 - ? enabled 57 + ? !enabled
58 : result.data.enableAddWithUCode == 1; 58 : result.data.enableAddWithUCode == 1;
59 } 59 }
60 } finally { 60 } finally {
@@ -126,7 +126,7 @@ class PrivacySettingsView extends GetView<PrivacySettingsController> { @@ -126,7 +126,7 @@ class PrivacySettingsView extends GetView<PrivacySettingsController> {
126 scaleX: 52 / 51, 126 scaleX: 52 / 51,
127 scaleY: 28 / 31, 127 scaleY: 28 / 31,
128 child: CupertinoSwitch( 128 child: CupertinoSwitch(
129 - value: value.value, 129 + value: !value.value,
130 activeTrackColor: AppColors.primary, 130 activeTrackColor: AppColors.primary,
131 inactiveTrackColor: const Color(0xFFE5E5EA), 131 inactiveTrackColor: const Color(0xFFE5E5EA),
132 onChanged: onChanged(), 132 onChanged: onChanged(),