health_trend_control.dart
1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import 'package:get/get.dart';
import '../../report_common/config/report_date_range_config.dart';
import '../../report_common/models/report_period.dart';
mixin HealthTrendControl on GetxController {
final selectedTypeIndex = 0.obs;
final selectedPeriod = ReportPeriod.week.obs;
final selectedDate = ReportDateRangeConfig.clampDate(DateTime.now()).obs;
void changeType(int index) {
final nextIndex = normalizeTypeIndex(index);
selectedTypeIndex.value = nextIndex;
selectedPeriod.value = normalizePeriod(nextIndex, selectedPeriod.value);
}
void changePeriod(ReportPeriod period) {
selectedPeriod.value = normalizePeriod(selectedTypeIndex.value, period);
}
void changeDate(DateTime date) {
selectedDate.value = ReportDateRangeConfig.clampDate(date);
}
int normalizeTypeIndex(int index) => index >= 0 && index < 3 ? index : 0;
ReportPeriod normalizePeriod(int typeIndex, ReportPeriod period) {
final periods = supportedPeriods(normalizeTypeIndex(typeIndex));
return periods.contains(period) ? period : periods.first;
}
List<ReportPeriod> supportedPeriods(int typeIndex) {
return normalizeTypeIndex(typeIndex) == 0
? const [ReportPeriod.week, ReportPeriod.month, ReportPeriod.year]
: const [ReportPeriod.day, ReportPeriod.week, ReportPeriod.month];
}
}