scheduleNotification method
Future<NotificationFailure?>
scheduleNotification(
- NotificationPayload payload,
- DateTime scheduledTime, {
- bool respectUserPreferences = true,
- bool respectQuietHours = false,
Schedules a notification for future delivery. Uses local repository for scheduling.
Implementation
Future<NotificationFailure?> scheduleNotification(
NotificationPayload payload,
DateTime scheduledTime, {
bool respectUserPreferences = true,
bool respectQuietHours = false,
}) 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) {
final NotificationPayload originalPayload = payload;
finalPayload = _applyUserPreferences(payload, userPreferences);
// Log scheduling preference changes
if (finalPayload.silent && !originalPayload.silent) {
safeDebugLog(
'''π SCHEDULED notification "${payload.title}" set to SILENT due to user preferences''',
);
}
if (originalPayload.enableVibration && !finalPayload.enableVibration) {
safeDebugLog(
'''π³ Vibration disabled for SCHEDULED "${payload.title}" by user preferences''',
);
}
if (originalPayload.playSound && !finalPayload.playSound) {
safeDebugLog(
'''π Sound disabled for SCHEDULED "${payload.title}" by user preferences''',
);
}
}
// Adjust for quiet hours if enabled
DateTime finalScheduledTime = scheduledTime;
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: scheduledTime,
quietStartHour: startHour,
quietEndHour: endHour,
quietDays: quietDays,
);
// Log if scheduling time was adjusted for quiet hours
if (finalScheduledTime != scheduledTime) {
safeDebugLog(
'''π SCHEDULED notification "${payload.title}" time adjusted for quiet hours: ${scheduledTime.toLocal()} β ${finalScheduledTime.toLocal()}''',
);
}
}
}
return await _localRepository.scheduleNotification(
finalPayload.copyWith(
isScheduled: true,
scheduledDateTime: finalScheduledTime,
),
finalScheduledTime,
);
} catch (e, stackTrace) {
safeDebugLog('Failed to schedule notification: $e');
return NotificationFailure.scheduling(
details: e.toString(),
stackTrace: stackTrace,
);
}
}