showRewarded method

Future<bool> showRewarded({
  1. Future<void> onUserEarnedReward()?,
  2. VoidCallback? onDismissed,
})

Implementation

Future<bool> showRewarded({
  Future<void> Function()? onUserEarnedReward,
  VoidCallback? onDismissed,
}) async {
  // Pro users always get reward free (even if ads never initialized)
  if (_isProUser()) {
    await onUserEarnedReward?.call();
    onDismissed?.call();
    return true;
  }

  if (!_isSafeToOperate) return false;

  if (!hasRewarded || _rewardedHandler == null) return false;

  if (!_rewardedHandler!.isLoaded) {
    final loaded = await _ensureRewardedLoading();
    if (!loaded) {
      dPrint('⏭️ Rewarded ad unavailable. Trying interstitial fallback.');
      await _showInterstitialFallback(onDismissed: onDismissed);
      return false;
    }
  }

  _rewardedHandler!.onDismissed = () {
    onDismissed?.call();
    Future.delayed(const Duration(milliseconds: 500), _ensureRewardedLoading);
  };

  return _rewardedHandler!.show(onUserEarnedReward: onUserEarnedReward);
}