getInstance static method
Future<ComprehensiveNotificationManager>
getInstance({
- FirebaseNotificationRepository? firebaseRepository,
- LocalNotificationRepository? localRepository,
- NotificationTemplateBuilder? templateBuilder,
- NotificationScheduler? scheduler,
- NotificationPermissionManager? permissionManager,
- ForegroundNotificationConfig? foregroundConfig,
Gets the singleton instance with proper initialization.
This method ensures only one instance exists, preventing duplicate notification processing even if called multiple times.
Parameters:
firebaseRepository
: Firebase repository for remote notifications (optional)localRepository
: Local repository for device notifications (optional)templateBuilder
: Template builder for creating notifications (optional)scheduler
: Scheduler for notification timing (optional)permissionManager
: Permission manager (optional)foregroundConfig
: Configuration for foreground dialog display
Implementation
static Future<ComprehensiveNotificationManager> getInstance({
FirebaseNotificationRepository? firebaseRepository,
LocalNotificationRepository? localRepository,
NotificationTemplateBuilder? templateBuilder,
NotificationScheduler? scheduler,
NotificationPermissionManager? permissionManager,
ForegroundNotificationConfig? foregroundConfig,
}) async {
// Return existing instance if already initialized
final ComprehensiveNotificationManager? instance = _instance;
if (instance != null && instance._isInitialized) {
safeDebugLog(
'Returning existing ComprehensiveNotificationManager instance',
);
return instance;
}
// Wait for ongoing initialization if in progress
final Completer<ComprehensiveNotificationManager>? completer =
_initCompleter;
if (completer != null) {
safeDebugLog(
'Waiting for ongoing ComprehensiveNotificationManager initialization',
);
return completer.future;
}
// Start new initialization
_initCompleter = Completer<ComprehensiveNotificationManager>();
safeDebugLog('Creating new ComprehensiveNotificationManager instance');
try {
final FirebaseNotificationRepository finalFirebaseRepository =
firebaseRepository ??
await FirebaseNotificationRepository.getInstance();
final LocalNotificationRepository finalLocalRepository =
localRepository ?? await LocalNotificationRepository.getInstance();
final NotificationPermissionManager finalPermissionManager =
permissionManager ??
NotificationPermissionManager(repository: finalLocalRepository);
final ForegroundNotificationManager foregroundManager =
ForegroundNotificationManager(config: foregroundConfig);
_instance = ComprehensiveNotificationManager._(
firebaseRepository: finalFirebaseRepository,
localRepository: finalLocalRepository,
templateBuilder: templateBuilder ?? const NotificationTemplateBuilder(),
scheduler: scheduler ?? const NotificationScheduler(),
permissionManager: finalPermissionManager,
foregroundManager: foregroundManager,
);
final ComprehensiveNotificationManager? instance = _instance;
if (instance != null) {
_initCompleter?.complete(instance);
safeDebugLog(
'ComprehensiveNotificationManager singleton created successfully',
);
return instance;
} else {
throw Exception(
'Failed to create ComprehensiveNotificationManager instance',
);
}
} catch (e) {
_initCompleter?.completeError(e);
_initCompleter = null;
safeDebugLog('Failed to create ComprehensiveNotificationManager: $e');
rethrow;
}
}