calendarEventsProvider top-level property
final
Calendar events bucketed by day for the given DateTimeRange.
Keys are normalized to local midnight so callers can look up a day with
map[DateTime(d.year, d.month, d.day)].
Implementation
final calendarEventsProvider = StreamProvider.autoDispose
.family<Map<DateTime, List<CalendarEvent>>, DateTimeRange>((ref, range) {
final repo = ref.watch(calendarRepositoryProvider);
return repo
.watchCalendarEvents(startDate: range.start, endDate: range.end)
.map((events) {
final map = <DateTime, List<CalendarEvent>>{};
for (final event in events) {
var current = DateTime(
event.start.year,
event.start.month,
event.start.day,
);
final adjustedEnd = event.displayEndDate;
final lastDay = adjustedEnd.isBefore(current)
? current
: adjustedEnd;
final last = DateTime(lastDay.year, lastDay.month, lastDay.day);
while (!current.isAfter(last)) {
map.putIfAbsent(current, () => []).add(event);
current = DateTime(
current.year,
current.month,
current.day + 1,
);
}
}
return map;
});
});