performLoadAd method
Implementation
@override
Future<RewardedAd?> performLoadAd({AdRequest? request}) async {
if (!AdsManager.isMobileAdsInitializeCalled) {
LogUtils.w('$adsType: Mobile Ads not initialized, ad loading canceled');
return Future.value(null);
}
final completer = Completer<RewardedAd?>();
RewardedAd? loadedAd;
bool isTimedOut = false;
void completeCompleter([RewardedAd? ad]) {
if (!completer.isCompleted) {
completer.complete(ad);
}
}
void disposeAd() {
loadedAd?.dispose();
loadedAd = null;
}
RewardedAd.load(
adUnitId: adUnitId,
request: request ?? defaultRequest,
rewardedAdLoadCallback: RewardedAdLoadCallback(
onAdLoaded: (ad) {
loadedAd = ad;
if (isTimedOut) {
disposeAd();
return;
}
LogUtils.d('$adsType: Ad loaded successfully');
completeCompleter(ad);
},
onAdFailedToLoad: (LoadAdError 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);
}