performLoadAd method

  1. @override
Future<InterstitialAd?> performLoadAd({
  1. AdRequest? request,
})
override

Implementation

@override
Future<InterstitialAd?> performLoadAd({AdRequest? request}) {
  if (!AdsManager.isMobileAdsInitializeCalled) {
    LogUtils.w('$adsType: Mobile Ads not initialized, ad loading canceled');
    return Future.value(null);
  }
  final completer = Completer<InterstitialAd?>();
  InterstitialAd? loadedAd;
  bool isTimedOut = false;
  void completeCompleter([InterstitialAd? ad]) {
    if (!completer.isCompleted) {
      completer.complete(ad);
    }
  }

  void disposeAd() {
    loadedAd?.dispose();
    loadedAd = null;
  }

  InterstitialAd.load(
      adUnitId: adUnitId,
      request: request ?? defaultRequest,
      adLoadCallback: InterstitialAdLoadCallback(
        onAdLoaded: (ad) {
          loadedAd = ad;
          if (isTimedOut) {
            disposeAd();
            return;
          }
          LogUtils.d('$adsType: Ad loaded successfully');
          completeCompleter(ad);
        },
        onAdFailedToLoad: (error) {
          LogUtils.e('$adsType: Failed to load ad', error: error);
          completeCompleter();
        },
      ));
  return completer.future.timeout(kLoadTimeout, onTimeout: () {
    isTimedOut = true;
    LogUtils.d('$adsType: Ad load timed out');
    disposeAd();
    completeCompleter();
    return null;
  }).catchError((e) => null);
}