dispose method

Disposes the notification manager and cleans up resources.

Implementation

Future<NotificationFailure?> dispose() async {
  try {
    if (!_isInitialized) return null;

    // Cancel Firebase foreground subscription
    await _firebaseForegroundSubscription?.cancel();
    _firebaseForegroundSubscription = null;

    // Dispose both repositories
    final NotificationFailure? firebaseError = await _firebaseRepository
        .dispose();
    final NotificationFailure? localError = await _localRepository.dispose();

    _isInitialized = false;
    _userPreferences = null;

    safeDebugLog('Comprehensive notification manager disposed');

    // Return the first error if any
    return firebaseError ?? localError;
  } catch (e, stackTrace) {
    safeDebugLog('Failed to dispose notification manager: $e');
    return NotificationFailure.unknown(
      details: e.toString(),
      stackTrace: stackTrace,
    );
  }
}