next method
Returns the next instance of the given date considering this Every
base process.
If the date is a DateTime that matches the Every pattern, a new
DateTime will be generated.
Implementation
@override
DateTime next(DateTime date, {DateTime? limit}) {
if (isEmpty) return date;
if ((limit != null) && date.isAfter(limit)) {
throw DateTimeLimitReachedException(date: date, limit: limit);
}
final nextDates =
map((every) => LimitedOrEveryHandler.next(every, date, limit: limit));
final validDates = nextDates.where(valid);
if (validDates.isNotEmpty) {
final result = validDates.reduce(DateReducer.reduceFuture);
if ((limit != null) && result.isAfter(limit)) {
throw DateTimeLimitReachedException(date: result, limit: limit);
}
return result;
}
return next(nextDates.reduce(DateReducer.reduceFuture), limit: limit);
}