@@ -11,9 +11,7 @@ import 'package:pilll/utils/datetime/day.dart';
11
11
// 予定されている生理日
12
12
// maxDateRangeCountは主にユニットテストの時に嬉しい引数になっているがプロダクションコードでもそのまま使用している
13
13
// ユースケースとして大体の未来のものを返せれば良いので厳密な計算結果が欲しいわけではないので動作確認とユニットテストをしやすい方式をとっている
14
- List <DateRange > scheduledMenstruationDateRanges (PillSheetGroup ? pillSheetGroup,
15
- Setting ? setting, List <Menstruation > menstruations,
16
- [int maxDateRangeCount = 15 ]) {
14
+ List <DateRange > scheduledMenstruationDateRanges (PillSheetGroup ? pillSheetGroup, Setting ? setting, List <Menstruation > menstruations, [int maxDateRangeCount = 15 ]) {
17
15
if (pillSheetGroup == null || setting == null ) {
18
16
return [];
19
17
}
@@ -25,31 +23,22 @@ List<DateRange> scheduledMenstruationDateRanges(PillSheetGroup? pillSheetGroup,
25
23
}
26
24
assert (maxDateRangeCount > 0 );
27
25
28
- final scheduledMenstruationDateRanges =
29
- pillSheetGroup.menstruationDateRanges (setting: setting);
26
+ final scheduledMenstruationDateRanges = pillSheetGroup.menstruationDateRanges (setting: setting);
30
27
List <DateRange > dateRanges = scheduledMenstruationDateRanges;
31
- final pillSheetGroupTotalPillCount = pillSheetGroup.pillSheetTypes
32
- .fold (0 , (p, e) => p + e.typeInfo.totalCount);
28
+ final pillSheetGroupTotalPillCount = pillSheetGroup.pillSheetTypes.fold (0 , (p, e) => p + e.typeInfo.totalCount);
33
29
for (var i = 1 ; i <= maxDateRangeCount; i++ ) {
34
30
final offset = pillSheetGroupTotalPillCount * i;
35
- final dateRangesWithOffset = scheduledMenstruationDateRanges
36
- .map ((e) => DateRange (e.begin.addDays (offset), e.end.addDays (offset)))
37
- .toList ();
31
+ final dateRangesWithOffset = scheduledMenstruationDateRanges.map ((e) => DateRange (e.begin.addDays (offset), e.end.addDays (offset))).toList ();
38
32
dateRanges = [...dateRanges, ...dateRangesWithOffset];
39
33
}
40
34
41
35
final menstruationDateRanges = menstruations.map ((e) => e.dateRange);
42
36
// `今日より前の生理予定日` と `すでに記録済みの生理予定日` はこのタイミングで除外する。scheduledMenstruationDateRangesを作成するタイミングだと後続のoffsetを含めた処理に影響が出る。
43
37
// 例えば現在2シートめでこのwhere句でフィルタリングしてしまうと、1シート目とoffsetを考慮した生理予定日が表示されないようになる
44
- dateRanges = dateRanges
45
- .where ((scheduledMenstruationRange) =>
46
- ! scheduledMenstruationRange.end.isBefore (today ()))
47
- .where ((scheduledMenstruationRange) {
38
+ dateRanges = dateRanges.where ((scheduledMenstruationRange) => ! scheduledMenstruationRange.end.isBefore (today ())).where ((scheduledMenstruationRange) {
48
39
// すでに記録されている生理については除外したものを予定されている生理とする
49
40
return menstruationDateRanges
50
- .where ((menstruationDateRange) =>
51
- menstruationDateRange.inRange (scheduledMenstruationRange.begin) ||
52
- menstruationDateRange.inRange (scheduledMenstruationRange.end))
41
+ .where ((menstruationDateRange) => menstruationDateRange.inRange (scheduledMenstruationRange.begin) || menstruationDateRange.inRange (scheduledMenstruationRange.end))
53
42
.isEmpty;
54
43
}).toList ();
55
44
@@ -61,16 +50,13 @@ List<DateRange> scheduledMenstruationDateRanges(PillSheetGroup? pillSheetGroup,
61
50
}
62
51
}
63
52
64
- List <DateRange > nextPillSheetDateRanges (PillSheetGroup pillSheetGroup,
65
- [int maxDateRangeCount = 15 ]) {
53
+ List <DateRange > nextPillSheetDateRanges (PillSheetGroup pillSheetGroup, [int maxDateRangeCount = 15 ]) {
66
54
if (pillSheetGroup.pillSheets.isEmpty) {
67
55
return [];
68
56
}
69
57
assert (maxDateRangeCount > 0 );
70
58
71
- final totalPillCount = pillSheetGroup.pillSheets
72
- .map ((e) => e.pillSheetType.totalCount)
73
- .reduce ((value, element) => value + element);
59
+ final totalPillCount = pillSheetGroup.pillSheets.map ((e) => e.pillSheetType.totalCount).reduce ((value, element) => value + element);
74
60
var dateRanges = < DateRange > [];
75
61
for (int i = 0 ; i < maxDateRangeCount; i++ ) {
76
62
final offset = totalPillCount * i;
@@ -89,8 +75,7 @@ List<DateRange> nextPillSheetDateRanges(PillSheetGroup pillSheetGroup,
89
75
}
90
76
}
91
77
92
- int bandLength (
93
- DateRange range, CalendarBandModel bandModel, bool isLineBreaked) {
78
+ int bandLength (DateRange range, CalendarBandModel bandModel, bool isLineBreaked) {
94
79
return range
95
80
.union (
96
81
DateRange (
@@ -107,7 +92,5 @@ bool isNecessaryLineBreak(DateTime date, DateRange dateRange) {
107
92
}
108
93
109
94
int offsetForStartPositionAtLine (DateTime begin, DateRange dateRange) {
110
- return isNecessaryLineBreak (begin, dateRange)
111
- ? 0
112
- : daysBetween (dateRange.begin.date (), begin.date ());
95
+ return isNecessaryLineBreak (begin, dateRange) ? 0 : daysBetween (dateRange.begin.date (), begin.date ());
113
96
}
0 commit comments