scheduleRecurringNotification method
Future<NotificationFailure?>
scheduleRecurringNotification(
- NotificationPayload payload,
- DateTime firstScheduledTime,
- RepeatInterval repeatInterval, {
- DateTime? endDate,
- bool respectUserPreferences = true,
- bool respectQuietHours = true,
Schedules a recurring notification. Uses local repository for recurring scheduling.
Implementation
Future<NotificationFailure?> scheduleRecurringNotification(
NotificationPayload payload,
DateTime firstScheduledTime,
RepeatInterval repeatInterval, {
DateTime? endDate,
bool respectUserPreferences = true,
bool respectQuietHours = true,
}) async {
try {
if (!_isInitialized) {
return NotificationFailure.initialization(
details: 'Notification manager not initialized',
);
}
// Apply user preferences
NotificationPayload finalPayload = payload;
final UserPreferencesModel? userPreferences = _userPreferences;
if (respectUserPreferences && userPreferences != null) {
finalPayload = _applyUserPreferences(payload, userPreferences);
}
// Adjust for quiet hours if enabled
DateTime finalScheduledTime = firstScheduledTime;
if (respectQuietHours && userPreferences != null) {
final QuietHoursSettings quietHours = userPreferences.quietHours;
if (quietHours.enabled) {
final int startHour =
_parseTimeString(quietHours.startTime ?? '22:00') ?? 22;
final int endHour =
_parseTimeString(quietHours.endTime ?? '06:00') ?? 6;
final List<int> quietDays = quietHours.weekdaysOnly
? <int>[1, 2, 3, 4, 5] // Monday to Friday
: <int>[];
finalScheduledTime = _scheduler.adjustForQuietHours(
scheduledTime: firstScheduledTime,
quietStartHour: startHour,
quietEndHour: endHour,
quietDays: quietDays,
);
}
}
// Validate recurring scheduling
final NotificationFailure? schedulingError = await _scheduler
.scheduleRecurringNotification(
payload: finalPayload,
firstScheduledTime: finalScheduledTime,
repeatInterval: repeatInterval,
endDate: endDate,
);
if (schedulingError != null) {
return schedulingError;
}
return await _localRepository.scheduleNotification(
finalPayload.copyWith(
isScheduled: true,
scheduledDateTime: finalScheduledTime,
repeatInterval: repeatInterval,
),
finalScheduledTime,
);
} catch (e, stackTrace) {
safeDebugLog('Failed to schedule recurring notification: $e');
return NotificationFailure.scheduling(
details: e.toString(),
stackTrace: stackTrace,
);
}
}