calculate method
void
calculate()
Calculates the placements of the events.
Implementation
void calculate() {
placements.clear();
_overflowCount = 0;
// Ensure day comparison is done using UTC for consistency
final dayStart = DateTime.utc(day.year, day.month, day.day, 0, 0, 0);
final dayEnd =
dayStart.add(const Duration(days: 1)); // End of the current day in UTC
final dayEvents = events.where((event) {
// Check for overlap between the event and the current day (in UTC)
return event.startDate.isBefore(dayEnd) &&
event.endDate.isAfter(dayStart);
}).toList();
dayEvents.sort((a, b) => a.startDate.compareTo(b.startDate));
if (dayEvents.length > maxEvents && maxEvents > 0) {
final int eventsToShow = maxEvents - 1;
_overflowCount = dayEvents.length - eventsToShow;
for (int i = 0; i < eventsToShow; i++) {
placements.add(
EventPlacement(event: dayEvents[i], dayIdx: 0, span: 1, rowIdx: i));
}
} else {
for (int i = 0; i < dayEvents.length; i++) {
if (i < maxEvents) {
placements.add(EventPlacement(
event: dayEvents[i], dayIdx: 0, span: 1, rowIdx: i));
}
}
}
}