Commit ebf173591f2c41d632beca120e3ed220d894b7c2

Authored by 刘宏哲
1 parent 6057916c

feat(app): bug fixed

@@ -43,7 +43,7 @@ class _YearTrendCard extends StatelessWidget { @@ -43,7 +43,7 @@ class _YearTrendCard extends StatelessWidget {
43 Text( 43 Text(
44 HealthReportSubjectScope.titleOf( 44 HealthReportSubjectScope.titleOf(
45 context, 45 context,
46 - context.l10n.hrvDailyStressTrend, 46 + context.l10n.hrvMonthlyStressTrend,
47 ), 47 ),
48 style: _titleStyle, 48 style: _titleStyle,
49 ), 49 ),
@@ -449,6 +449,7 @@ class _DailyDistributionCard extends StatelessWidget { @@ -449,6 +449,7 @@ class _DailyDistributionCard extends StatelessWidget {
449 449
450 @override 450 @override
451 Widget build(BuildContext context) { 451 Widget build(BuildContext context) {
  452 + final extremeDays = _dailyStressExtremeDays(report);
452 return _Card( 453 return _Card(
453 child: Column( 454 child: Column(
454 crossAxisAlignment: CrossAxisAlignment.start, 455 crossAxisAlignment: CrossAxisAlignment.start,
@@ -479,28 +480,73 @@ class _DailyDistributionCard extends StatelessWidget { @@ -479,28 +480,73 @@ class _DailyDistributionCard extends StatelessWidget {
479 ), 480 ),
480 const Divider(height: 25, color: _grid), 481 const Divider(height: 25, color: _grid),
481 _DateExtreme( 482 _DateExtreme(
482 - label: context.l10n.hrvMostStressed,  
483 - days: _extremeDays(report, maximum: true)), 483 + label: context.l10n.hrvMostStressed,
  484 + days: extremeDays.mostStressed,
  485 + ),
484 const SizedBox(height: 18), 486 const SizedBox(height: 18),
485 _DateExtreme( 487 _DateExtreme(
486 - label: context.l10n.hrvMostRelaxed,  
487 - days: _extremeDays(report, maximum: false)), 488 + label: context.l10n.hrvMostRelaxed,
  489 + days: extremeDays.mostRelaxed,
  490 + ),
488 ], 491 ],
489 ), 492 ),
490 ); 493 );
491 } 494 }
492 495
493 - List<HrvDayReport> _extremeDays(YearlyHrvReport report,  
494 - {required bool maximum}) {  
495 - final days = report.days.where((day) => day.level != null).toList();  
496 - days.sort((a, b) {  
497 - final aValue = _stressRank(a.level!);  
498 - final bValue = _stressRank(b.level!);  
499 - final valueComparison =  
500 - maximum ? bValue.compareTo(aValue) : aValue.compareTo(bValue);  
501 - return valueComparison == 0 ? a.date.compareTo(b.date) : valueComparison;  
502 - });  
503 - return days.take(2).toList(); 496 + ({List<HrvDayReport> mostStressed, List<HrvDayReport> mostRelaxed})
  497 + _dailyStressExtremeDays(YearlyHrvReport report) {
  498 + final days = report.days.where((day) => day.level != null).toList()
  499 + ..sort(_compareByStressDescending);
  500 +
  501 + final mostStressed = <HrvDayReport>[];
  502 + final mostRelaxed = <HrvDayReport>[];
  503 + if (days.isEmpty) {
  504 + return (mostStressed: mostStressed, mostRelaxed: mostRelaxed);
  505 + }
  506 +
  507 + if (days.length == 1) {
  508 + final day = days.single;
  509 + if (_isStressedLevel(day.level!)) {
  510 + mostStressed.add(day);
  511 + } else {
  512 + mostRelaxed.add(day);
  513 + }
  514 + return (mostStressed: mostStressed, mostRelaxed: mostRelaxed);
  515 + }
  516 +
  517 + mostStressed.add(days.first);
  518 + mostRelaxed.add(days.last);
  519 +
  520 + if (days.length == 3) {
  521 + final middle = days[1];
  522 + if (_isStressedLevel(middle.level!)) {
  523 + mostStressed.add(middle);
  524 + } else {
  525 + mostRelaxed.add(middle);
  526 + }
  527 + } else if (days.length >= 4) {
  528 + mostStressed.add(days[1]);
  529 + mostRelaxed.add(days[days.length - 2]);
  530 + }
  531 +
  532 + mostStressed.sort(_compareByDate);
  533 + mostRelaxed.sort(_compareByDate);
  534 + return (mostStressed: mostStressed, mostRelaxed: mostRelaxed);
  535 + }
  536 +
  537 + int _compareByStressDescending(HrvDayReport a, HrvDayReport b) {
  538 + final valueComparison =
  539 + _stressRank(b.level!).compareTo(_stressRank(a.level!));
  540 + return valueComparison == 0 ? a.date.compareTo(b.date) : valueComparison;
  541 + }
  542 +
  543 + int _compareByDate(HrvDayReport a, HrvDayReport b) {
  544 + return a.date.compareTo(b.date);
  545 + }
  546 +
  547 + bool _isStressedLevel(HrvStressLevel level) {
  548 + return level == HrvStressLevel.attention ||
  549 + level == HrvStressLevel.overload;
504 } 550 }
505 551
506 int _stressRank(HrvStressLevel level) { 552 int _stressRank(HrvStressLevel level) {
@@ -326,6 +326,7 @@ @@ -326,6 +326,7 @@
326 "sleepQualityNormal": "Normal", 326 "sleepQualityNormal": "Normal",
327 "sleepQualityAttention": "Needs attention", 327 "sleepQualityAttention": "Needs attention",
328 "hrvDailyStressTrend": "Daily Stress Trend", 328 "hrvDailyStressTrend": "Daily Stress Trend",
  329 + "hrvMonthlyStressTrend": "Monthly Stress Trend",
329 "hrvMoreRelaxed": "More relaxed", 330 "hrvMoreRelaxed": "More relaxed",
330 "hrvMoreStressed": "More stressed", 331 "hrvMoreStressed": "More stressed",
331 "hrvStressDistribution": "Stress Distribution", 332 "hrvStressDistribution": "Stress Distribution",
@@ -498,6 +498,7 @@ @@ -498,6 +498,7 @@
498 "sleepQualityNormal": "正常", 498 "sleepQualityNormal": "正常",
499 "sleepQualityAttention": "注意", 499 "sleepQualityAttention": "注意",
500 "hrvDailyStressTrend": "每日压力趋势", 500 "hrvDailyStressTrend": "每日压力趋势",
  501 + "hrvMonthlyStressTrend": "每月压力趋势",
501 "hrvMoreRelaxed": "较轻松", 502 "hrvMoreRelaxed": "较轻松",
502 "hrvMoreStressed": "压力较大", 503 "hrvMoreStressed": "压力较大",
503 "hrvStressDistribution": "压力分布", 504 "hrvStressDistribution": "压力分布",
@@ -2055,6 +2055,12 @@ abstract class AppLocalizations { @@ -2055,6 +2055,12 @@ abstract class AppLocalizations {
2055 /// **'每日压力趋势'** 2055 /// **'每日压力趋势'**
2056 String get hrvDailyStressTrend; 2056 String get hrvDailyStressTrend;
2057 2057
  2058 + /// No description provided for @hrvMonthlyStressTrend.
  2059 + ///
  2060 + /// In zh, this message translates to:
  2061 + /// **'每月压力趋势'**
  2062 + String get hrvMonthlyStressTrend;
  2063 +
2058 /// No description provided for @hrvMoreRelaxed. 2064 /// No description provided for @hrvMoreRelaxed.
2059 /// 2065 ///
2060 /// In zh, this message translates to: 2066 /// In zh, this message translates to:
@@ -1135,6 +1135,9 @@ class AppLocalizationsEn extends AppLocalizations { @@ -1135,6 +1135,9 @@ class AppLocalizationsEn extends AppLocalizations {
1135 String get hrvDailyStressTrend => 'Daily Stress Trend'; 1135 String get hrvDailyStressTrend => 'Daily Stress Trend';
1136 1136
1137 @override 1137 @override
  1138 + String get hrvMonthlyStressTrend => 'Monthly Stress Trend';
  1139 +
  1140 + @override
1138 String get hrvMoreRelaxed => 'More relaxed'; 1141 String get hrvMoreRelaxed => 'More relaxed';
1139 1142
1140 @override 1143 @override
@@ -1071,6 +1071,9 @@ class AppLocalizationsZh extends AppLocalizations { @@ -1071,6 +1071,9 @@ class AppLocalizationsZh extends AppLocalizations {
1071 String get hrvDailyStressTrend => '每日压力趋势'; 1071 String get hrvDailyStressTrend => '每日压力趋势';
1072 1072
1073 @override 1073 @override
  1074 + String get hrvMonthlyStressTrend => '每月压力趋势';
  1075 +
  1076 + @override
1074 String get hrvMoreRelaxed => '较轻松'; 1077 String get hrvMoreRelaxed => '较轻松';
1075 1078
1076 @override 1079 @override