next method

  1. @override
DateTime next(
  1. DateTime date, {
  2. DateTime? limit,
})
override

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);
}