getPermissionStatus method

Future<NotificationPermissionStatus> getPermissionStatus()

Gets the current notification permission status.

Returns the permission status without showing a prompt.

Auto-clear behavior: If permission is detected as authorized or provisional and there is stored denial/settings-prompt info, it will be automatically cleared. This handles the case where the user enabled notifications via system settings.

Implementation

Future<NotificationPermissionStatus> getPermissionStatus() async {
  try {
    final settings = await FirebaseMessaging.instance.getNotificationSettings();

    NotificationPermissionStatus status;
    switch (settings.authorizationStatus) {
      case AuthorizationStatus.authorized:
        status = NotificationPermissionStatus.authorized;
      case AuthorizationStatus.denied:
        status = NotificationPermissionStatus.denied;
      case AuthorizationStatus.notDetermined:
        status = NotificationPermissionStatus.notDetermined;
      case AuthorizationStatus.provisional:
        status = NotificationPermissionStatus.provisional;
    }

    // Auto-clear denial/settings info if permission was granted via settings
    if (status == NotificationPermissionStatus.authorized ||
        status == NotificationPermissionStatus.provisional) {
      await _permissionHelper.autoClearIfGranted();
    }

    return status;
  } catch (e, stackTrace) {
    loge(e, 'Error getting permission status', stackTrace);
    _onError?.call('Error getting permission status: $e', stackTrace);
    // Return denied as safe default - don't assume we have permission
    return NotificationPermissionStatus.denied;
  }
}