getNextOccurrence method

TZDateTime? getNextOccurrence({
  1. required DateTime lastOccurrence,
  2. required RepeatInterval repeatInterval,
  3. String? timeZone,
})

Calculates the next occurrence of a recurring notification.

Implementation

tz.TZDateTime? getNextOccurrence({
  required DateTime lastOccurrence,
  required RepeatInterval repeatInterval,
  String? timeZone,
}) {
  try {
    final tz.TZDateTime lastTZDateTime = _convertToTZDateTime(
      lastOccurrence,
      timeZone,
    );

    switch (repeatInterval) {
      case RepeatInterval.none:
        return null;
      case RepeatInterval.everyMinute:
        return lastTZDateTime.add(const Duration(minutes: 1));
      case RepeatInterval.hourly:
        return lastTZDateTime.add(const Duration(hours: 1));
      case RepeatInterval.daily:
        return lastTZDateTime.add(const Duration(days: 1));
      case RepeatInterval.weekly:
        return lastTZDateTime.add(const Duration(days: 7));
      case RepeatInterval.monthly:
        return tz.TZDateTime(
          lastTZDateTime.location,
          lastTZDateTime.year,
          lastTZDateTime.month + 1,
          lastTZDateTime.day,
          lastTZDateTime.hour,
          lastTZDateTime.minute,
          lastTZDateTime.second,
        );
      case RepeatInterval.yearly:
        return tz.TZDateTime(
          lastTZDateTime.location,
          lastTZDateTime.year + 1,
          lastTZDateTime.month,
          lastTZDateTime.day,
          lastTZDateTime.hour,
          lastTZDateTime.minute,
          lastTZDateTime.second,
        );
    }
  } catch (e) {
    safeDebugLog('Failed to calculate next occurrence: $e');
    return null;
  }
}