Skip to content

Commit 5a55b4d

Browse files
author
Shubham Jitiya
committed
♻️ refactor recurrence handling
1 parent 0c15e8c commit 5a55b4d

File tree

2 files changed

+48
-37
lines changed

2 files changed

+48
-37
lines changed

example/lib/widgets/add_event_form.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ class _AddOrEditEventFormState extends State<AddOrEditEventForm> {
145145
));
146146
} else {
147147
_endDate = date.withoutTime;
148+
_recurrenceEndDate = _endDate;
148149
updateWeekdaysSelection();
149150
}
150151

lib/src/event_controller.dart

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ class EventController<T extends Object?> extends ChangeNotifier {
138138
return currentDate.day == startDate.day;
139139
case RecurrenceEnd.on:
140140
return recurrenceEndDate != null &&
141-
(currentDate.day == startDate.day) &&
141+
(currentDate.day >= startDate.day &&
142+
currentDate.isBefore(recurrenceEndDate)) &&
142143
currentDate.isBefore(recurrenceEndDate.add(
143144
Duration(days: 1),
144145
));
@@ -165,6 +166,43 @@ class EventController<T extends Object?> extends ChangeNotifier {
165166
));
166167
}
167168
}
169+
170+
bool _handleRecurrence({
171+
required DateTime currentDate,
172+
required DateTime eventStartDate,
173+
required DateTime eventEndDate,
174+
required RecurrenceSettings recurrenceSettings,
175+
}) {
176+
switch (recurrenceSettings.frequency) {
177+
case RepeatFrequency.daily:
178+
final isDailyRecurrence = _isDailyRecurrence(
179+
currentDate: currentDate,
180+
eventEnd: eventEndDate,
181+
recurrenceSettings: recurrenceSettings,
182+
);
183+
return isDailyRecurrence;
184+
case RepeatFrequency.weekly:
185+
final isWeeklyRecurrence = _isWeeklyRecurrence(
186+
currentDate: currentDate,
187+
eventStartDate: eventStartDate,
188+
recurrenceSettings: recurrenceSettings,
189+
);
190+
return isWeeklyRecurrence;
191+
case RepeatFrequency.monthly:
192+
final isMonthlyRecurrence = _isMonthlyRecurrence(
193+
currentDate: currentDate,
194+
startDate: eventStartDate,
195+
recurrenceSettings: recurrenceSettings,
196+
);
197+
return isMonthlyRecurrence;
198+
case RepeatFrequency.yearly:
199+
// TODO(Shubham): Handle this case.
200+
break;
201+
case RepeatFrequency.doNotRepeat:
202+
break;
203+
}
204+
return false;
205+
}
168206
//#endregion
169207

170208
//#region Public Methods
@@ -268,42 +306,14 @@ class EventController<T extends Object?> extends ChangeNotifier {
268306
if (recurrenceSettings == null) {
269307
continue;
270308
}
271-
switch (recurrenceSettings.frequency) {
272-
case RepeatFrequency.daily:
273-
final isDailyRecurrence = _isDailyRecurrence(
274-
currentDate: date,
275-
eventEnd: event.endDate,
276-
recurrenceSettings: recurrenceSettings,
277-
);
278-
if (isDailyRecurrence) {
279-
events.add(event);
280-
}
281-
break;
282-
case RepeatFrequency.weekly:
283-
final isWeeklyRecurrence = _isWeeklyRecurrence(
284-
currentDate: date,
285-
eventStartDate: event.date,
286-
recurrenceSettings: recurrenceSettings,
287-
);
288-
if (isWeeklyRecurrence) {
289-
events.add(event);
290-
}
291-
break;
292-
case RepeatFrequency.monthly:
293-
final isWeeklyRecurrence = _isMonthlyRecurrence(
294-
currentDate: date,
295-
startDate: event.date,
296-
recurrenceSettings: recurrenceSettings,
297-
);
298-
if (isWeeklyRecurrence) {
299-
events.add(event);
300-
}
301-
break;
302-
case RepeatFrequency.yearly:
303-
// TODO: Handle this case.
304-
break;
305-
case RepeatFrequency.doNotRepeat:
306-
break;
309+
final isRecurrence = _handleRecurrence(
310+
currentDate: date,
311+
eventStartDate: event.date,
312+
eventEndDate: event.endDate,
313+
recurrenceSettings: recurrenceSettings,
314+
);
315+
if (isRecurrence) {
316+
events.add(event);
307317
}
308318
}
309319
return events;

0 commit comments

Comments
 (0)