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