Rewarded ads are ads that users have the option of interacting with in exchange for in-app rewards. This guide shows how to integrate rewarded ads from AdMob into a Flutter app.

Always test with test ads

When building and testing your apps, make sure you use test ads rather than live, production ads. Failure to do so can lead to suspension of your account.

The easiest way to load test ads is to use our dedicated test ad unit ID for rewarded ads:

The test ad units are configured to return test ads for every request, and you're free to use them in your own apps while coding, testing, and debugging. Just make sure you replace them with your own ad unit IDs before publishing your app.

Load an ad

Loading a RewardedAd requires an adUnitId, an AdRequest, and a RewardedAdLoadCallback. The following example loads a rewarded ad:

  adUnitId: '<test id or account id>',
  request: AdRequest(),
  rewardedAdLoadCallback: RewardedAdLoadCallback(
    onAdLoaded: (RewardedAd ad) {
      print('$ad loaded.');
      // Keep a reference to the ad so you can show it later.
      this._rewardedAd = ad;
    onAdFailedToLoad: (LoadAdError error) {
      print('RewardedAd failed to load: $error');

Rewarded ad events

Through the use of FullScreenContentCallback, you can listen for lifecycle events, such as when the ad is shown or dismissed. Set RewardedAd.fullScreenContentCallback before showing the ad to receive notifications for these events. This example implements each method and logs a message to the console:

rewardedAd.fullScreenContentCallback = FullScreenContentCallback(
  onAdShowedFullScreenContent: (RewardedAd ad) =>
     print('$ad onAdShowedFullScreenContent.'),
  onAdDismissedFullScreenContent: (RewardedAd ad) {
    print('$ad onAdDismissedFullScreenContent.');
  onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) {
    print('$ad onAdFailedToShowFullScreenContent: $error');
  onAdImpression: (RewardedAd ad) => print('$ad impression occurred.'),

Display ad

A RewardedAd is displayed as an Overlay on top of all app content and is statically placed; thus, it can't be added to the Flutter widget tree. You can choose when to show the add by calling show(). takes an OnUserEarnedRewardCallback, which is invoked when the user earns a reward. Be sure to implement this and reward the user for watching an ad. (RewardedAd ad, RewardItem rewardItem) {
  // Reward the user for watching an ad.

Once show() is called, an Ad displayed this way can't be removed programmatically and requires user input. A RewardedAd can only be shown once. Subsequent calls to show will trigger onAdFailedToShowFullScreenContent.

Once an ad has called load(), it must call dispose() when access to it is no longer needed. The best practice for when to call dispose() is in the FullScreenContentCallback.onAdDismissedFullScreenContent and FullScreenContentCallback.onAdFailedToShowFullScreenContent callbacks.

That's it! Your app is now ready to display rewarded ads.