calendarEventsProvider top-level property

StreamProviderFamily<Map<DateTime, List<CalendarEvent>>, DateTimeRange<DateTime>> calendarEventsProvider
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;
          });
    });