runSchedulingDiagnostics method
Runs comprehensive diagnostics for scheduled notifications debugging.
Implementation
Future<Map<String, dynamic>> runSchedulingDiagnostics() async {
if (!_isInitialized) {
return <String, dynamic>{
'error': 'Notification manager not initialized',
'initialized': false,
};
}
final Map<String, dynamic> diagnostics = <String, dynamic>{
'initialized': _isInitialized,
'user_preferences': _userPreferences?.toMap(),
'current_time': DateTime.now().toIso8601String(),
};
// Check permissions
final (NotificationFailure? permissionError, PermissionStatus status) =
await checkPermissionStatus();
diagnostics['permission_status'] = status.toString();
if (permissionError != null) {
diagnostics['permission_error'] = permissionError.message;
}
// Check pending notifications
final (
NotificationFailure? pendingError,
List<NotificationEntity>? pending,
) = await getPendingNotifications();
diagnostics['pending_notifications_count'] = pending?.length ?? 0;
if (pendingError != null) {
diagnostics['pending_error'] = pendingError.message;
}
// Test a simple scheduled notification
try {
final DateTime testTime = DateTime.now().add(const Duration(seconds: 10));
final NotificationPayload testPayload = NotificationPayload(
id: 'diagnostic_test_${DateTime.now().millisecondsSinceEpoch}',
title: '🧪 Scheduling Test',
body: 'This is a diagnostic test notification',
importance: NotificationImportance.high,
priority: NotificationPriority.high,
);
final NotificationFailure? testError = await scheduleNotification(
testPayload,
testTime,
respectUserPreferences: false,
);
diagnostics['test_scheduling'] = <String, dynamic>{
'success': testError == null,
'error': testError?.message,
'scheduled_time': testTime.toIso8601String(),
};
// Clean up test notification
if (testError == null) {
await cancelNotification(testPayload.id);
}
} catch (e) {
diagnostics['test_scheduling'] = <String, dynamic>{
'success': false,
'error': 'Exception during test: $e',
};
}
return diagnostics;
}