requestPermissions method

Future<NotificationPermissionStatus> requestPermissions({
  1. bool provisional = false,
})

Requests notification permissions from the user.

On iOS, this shows the system permission prompt if permissions haven't been determined yet. Once denied, users must enable permissions in Settings.

On Android 13+, this shows the runtime permission prompt.

Returns the resulting permission status.

If permissions are granted, this automatically triggers FCM token registration via AuthServiceImpl (if integrated).

Implementation

Future<NotificationPermissionStatus> requestPermissions({
  bool provisional = false,
}) async {
  try {
    await _trackPermissionRequest();

    final settings = await FirebaseMessaging.instance.requestPermission(
      alert: true,
      badge: true,
      sound: true,
      provisional: provisional,
      criticalAlert: false,
      announcement: false,
      carPlay: false,
    );

    final status = _convertAuthorizationStatus(settings.authorizationStatus);

    if (status == NotificationPermissionStatus.denied) {
      await _trackPermissionDenial();
    }

    logi('Permission request result: $status');

    // TODO: Notify AuthServiceImpl if permissions were granted

    return status;
  } catch (e, stackTrace) {
    loge(e, 'Error requesting permissions', stackTrace);
    _onError?.call('Error requesting permissions: $e', stackTrace);
    return NotificationPermissionStatus.denied;
  }
}