occurrencesIn method
Every occurrence that touches range.
Implementation
Iterable<EventOccurrence<T>> occurrencesIn(DateRange range) sync* {
final from = range.start;
final to = range.end.endOfDay;
final rule = recurrence;
if (status == EventStatus.cancelled) return;
if (rule == null) {
if (!end.isBefore(from) && !start.isAfter(to)) {
yield EventOccurrence(this, start, end);
}
for (final extra in additionalDates) {
final e = extra.add(duration);
if (!e.isBefore(from) && !extra.isAfter(to)) yield EventOccurrence(this, extra, e);
}
return;
}
final len = duration;
for (final extra in additionalDates) {
final e = extra.add(len);
if (!e.isBefore(from) && !extra.isAfter(to)) yield EventOccurrence(this, extra, e);
}
// Start a little early so occurrences that began before the range but
// are still running are included.
final lookBack = from.subtract(len);
for (final s in rule.occurrences(start, exclude: exceptionDates)) {
if (s.isAfter(to)) break;
if (s.isBefore(lookBack)) continue;
final e = s.add(len);
if (!e.isBefore(from)) yield EventOccurrence(this, s, e);
}
}