showDirect method

void showDirect({
  1. VoidCallback? onDismissed,
  2. VoidCallback? onResumeNavigation,
})

Splash/direct interstitial: never reload, never retry-on-call.

Implementation

void showDirect({
  VoidCallback? onDismissed,
  VoidCallback? onResumeNavigation,
}) {
  if (!_isSafeToOperate) {
    dPrint('Not Safe to Operate Resuming');
    onResumeNavigation?.call();
    return;
  }

  if (!hasDirectInterstitial || _isProUser()) {
    dPrint('Not Have Direct Ad Resuming');
    onResumeNavigation?.call();
    return;
  }

  if (_directInterstitialHandler?.isLoaded != true) {
    dPrint('⏭️ Splash Ad not ready in time. Skipping.');
    onResumeNavigation?.call();
    return;
  }

  final handler = _directInterstitialHandler!;
  final originalOnDismissed = handler.onDismissed;
  final originalOnError = handler.onError;
  var navigationResumed = false;

  void resumeNavigation() {
    if (navigationResumed) return;
    navigationResumed = true;
    onResumeNavigation?.call();
  }

  void restoreCallbacks() {
    handler.onDismissed = originalOnDismissed;
    handler.onError = originalOnError;
  }

  handler.onDismissed = () {
    _interstitialJustDismissed = true;
    onDismissed?.call();
    resumeNavigation();
    restoreCallbacks();
  };

  handler.onError = (error) {
    _interstitialJustDismissed = true;
    resumeNavigation();
    restoreCallbacks();
    originalOnError?.call(error);
  };

  handler.show().then((shown) {
    if (!shown) {
      resumeNavigation();
      restoreCallbacks();
    }
  });
}