requestAndRegister method

Future<VoNotificationPermissionStatus> requestAndRegister()

Requests system permission, obtains the FCM token, and registers it.

Implementation

Future<VoNotificationPermissionStatus> requestAndRegister() async {
  if (!_isEnabled) {
    state = state.copyWith(
      permissionStatus: VoNotificationPermissionStatus.unavailable,
    );
    return VoNotificationPermissionStatus.unavailable;
  }

  if (!ref.read(authControllerProvider).isAuthenticated) {
    VoLogger.w(
      '[NotificationController] Cannot register device — user is not authenticated.',
    );
    return state.permissionStatus;
  }

  state = state.copyWith(isRegistering: true, error: null);

  final token = await VoMessaging.requestPermissionAndGetToken();
  if (token == null) {
    state = state.copyWith(
      isRegistering: false,
      permissionStatus: VoNotificationPermissionStatus.denied,
    );
    return VoNotificationPermissionStatus.denied;
  }

  final registered = await _registerToken(token);
  state = state.copyWith(
    isRegistering: false,
    fcmToken: registered ? token : state.fcmToken,
    permissionStatus: registered
        ? VoNotificationPermissionStatus.granted
        : VoNotificationPermissionStatus.denied,
  );
  return state.permissionStatus;
}