createInterstitialAd method

Future<void> createInterstitialAd(
  1. BuildContext context, {
  2. bool load = true,
  3. int numInterstitialLoadAttempts = 5,
})

Asynchronously creates and loads an interstitial ad.

Implementation

Future<void> createInterstitialAd(
  BuildContext context, {
  bool load = true,
  int numInterstitialLoadAttempts = 5,
}) async {
  if (!AdmobEasy.instance.isConnected.value ||
      !load ||
      AdmobEasy.instance.initAdID.isEmpty) {
    log('Interstitial ad cannot load');
    return;
  }

  // Dispose existing ad if present
  if (interstitialAd != null) {
    interstitialAd!.dispose();
  }

  // Load new interstitial ad
  await InterstitialAd.load(
    adUnitId: AdmobEasy.instance.initAdID,
    request: const AdRequest(),
    adLoadCallback: InterstitialAdLoadCallback(
      onAdLoaded: (InterstitialAd ad) {
        log('$ad loaded');
        interstitialAd = ad;
        _numInterstitialLoadAttempts = 0;
        interstitialAd!.setImmersiveMode(true);
      },
      onAdFailedToLoad: (LoadAdError error) async {
        log('InterstitialAd failed to load: $error.');
        _numInterstitialLoadAttempts += 1;
        interstitialAd = null;

        // Retry loading if attempts are less than 5
        if (_numInterstitialLoadAttempts < numInterstitialLoadAttempts) {
          await Future.delayed(const Duration(seconds: 2), () {
            if (!context.mounted) return;
            createInterstitialAd(context);
          });
        }
      },
    ),
  );
}