Flutter: показывать награду, когда она загружена

#flutter #admob #flutter-dependencies #googlemobileads

#трепетать #admob #флаттер-зависимости #googlemobileads

Вопрос:

Чтобы показать рекламу, я делаю это:

 await adState.showRewardedAd(); await adState.rewardedAd!.show(onUserEarnedReward: (RewardedAd ad, RewardItem reward) { // reward });  

и:

 Future createRewardedAd([bool showVideo = false]) async {  await RewardedAd.load(  adUnitId: rewardeUnitAdId,  request: request,  rewardedAdLoadCallback: RewardedAdLoadCallback(  onAdLoaded: (RewardedAd ad) async {  adState.rewardedAd = ad;  _numRewardedLoadAttempts = 0;  if (showVideo) {  showRewardedAd();  }  },  onAdFailedToLoad: (LoadAdError error) async {  adState.rewardedAd = null;  _numRewardedLoadAttempts  = 1;  if (_numRewardedLoadAttempts lt;= maxFailedLoadAttempts) {  await createRewardedAd();  }  },  ),  );  }   Futurelt;voidgt; showRewardedAd() async {  if (adState.rewardedAd == null) {  return await createRewardedAd(true);  }   adState.rewardedAd!.fullScreenContentCallback =  await FullScreenContentCallback(  onAdShowedFullScreenContent: (RewardedAd ad) =gt; {},  onAdDismissedFullScreenContent: (RewardedAd ad) async {  ad.dispose();  await createRewardedAd();  },  onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) async {  ad.dispose();  await createRewardedAd();  },  );  }  

Поэтому каждый раз, когда мы закрываем rewardAd, мы создаем/загружаем его снова, чтобы подготовить к следующему разу. Пока здесь все в порядке.


Проблема возникает, когда мы нажимаем, чтобы показать его снова слишком быстро. Когда мы это сделаем:

 if (adState.rewardedAd == null) {  return await createRewardedAd(true);  }  

Я заставляю его загружаться и жду await RewardedAd.load() , НО, несмотря на то, что я жду этого, onAdLoaded событие занимает некоторое время, и асинхронная функция не знает, что оно еще не готово.

Так что, когда я это сделаю await adState.rewardedAd! , это может быть равно нулю.

Как я мог бы сделать это более безопасным? Документация Google не охватывает это