Skip to main content
Question

Restore button does not dismiss paywall

  • January 16, 2026
  • 6 replies
  • 76 views

Forum|alt.badge.img+3

Hello, I’m using react native (react-native-purchases and react-native-purchases-ui both at 9.7.0) for my iOS-only app. I’m displaying a paywall to my users via 

const result = await RevenueCatUI.presentPaywall({ offering });

The paywall renders correctly. I have a restore button that restore the purchase correctly, but it does not dismiss the paywall. The user is often left confused as to whether the restore worked or not.

 

How can I get the paywall to dismiss automatically after a restore? There’s no `dismiss()` method on `RevenueCatUI` either, and I would like to not use `<RevenueCatUI.Paywall />` component as that has several scroll issues when used in a bottom sheet to mimic similar behavior of `RevenueCatUI.presentPaywall()`

6 replies

  • New Member
  • January 19, 2026

andrew-moore-0bb907 You should use presentPaywallIfNeeded instead of presentPaywall . Checkout this RevenueCat’s discussion


Forum|alt.badge.img+3

Thanks Samar! That helped, but then when would you ever use `presentPayall`? It feels useless for any scenario where you want a restore button (required for iOS). The `presentPayall` promise resolves with RESTORED, but when I validate that it’s a valid restore, I can’t dismiss it… 

Unless I’m missing something, it would make sense to either

  • Remove `presentPaywall`
  • or add a `RevenueCatUI.dismiss()` button so we can validate restore ourselves and then dismiss the paywall manually

 

 


  • New Member
  • January 19, 2026

@andrew-moore-0bb907 I agree, I tried listening for changes in CustomerInfo object using addCustomerInfoUpdateListener  and checking if there’s any active entitlement, then pop the current screen i.e the paywall. However that did not work in my case.

I hope someone from RevenueCat’s Team to look into it.


joan-cardona
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • January 26, 2026

Hi ​@Samar Kalra and ​@andrew-moore-0bb907,

Is this something from a certain SDK version or you’ve always seen this behavior?

If the restore is successful - as in, there was something to restore - the `onRestoreCompleted` should fire and you should be able to dismiss the paywall there. Something like this:

async function presentPaywall(): Promise<boolean> {
// Present paywall for current offering:
const paywallResult: PAYWALL_RESULT = await RevenueCatUI.presentPaywall();
// or if you need to present a specific offering:
const paywallResult: PAYWALL_RESULT = await RevenueCatUI.presentPaywall({
offering: offering // Optional Offering object obtained through getOfferings
});

switch (paywallResult) {
case PAYWALL_RESULT.NOT_PRESENTED:
case PAYWALL_RESULT.ERROR:
case PAYWALL_RESULT.CANCELLED:
return false;
case PAYWALL_RESULT.PURCHASED:
case PAYWALL_RESULT.RESTORED:
return true;
default:
return false;
}
}

Let me know if this helps!


Forum|alt.badge.img+3

Hey Joan,

 

How do you a dismiss a paywall that’s shown via `RevenueCatUI.presentPaywall();`? Your example doesn't demonstrate that; it just returns true or false.


  • New Member
  • January 27, 2026

@joan-cardona I’m using 

purchases_flutter: ^9.9.1purchases_ui_flutter: ^9.9.2 and ​@andrew-moore-0bb907 has mentioned the version in the description, It’s 9.7.0.

I’m facing this issue in Flutter and Andrew is facing this in React Native.

The main issue we’re facing is that tapping “Restore Purchases” CTA doesn’t dismiss the paywall automatically even when there’s an active subscription in the store and when we tap close icon, Then it returns Paywall_Result.restored.

We tried using presentPaywallIfNeeded method which resolved this issue, Paywall is closing after successful restore.

I updated both my plugin version to 9.10.7. Still facing the same issue. Paywall doesn’t automatically dismiss after Restore.