requestAndRegister method
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;
}