showDirect method
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();
}
});
}