Flutter: AdMobでバナー広告を2つ表示したら「This AdWidget is already in the Widget tree」のエラー
結論:BannerAdクラスのインスタンスを2つ作成する
2021/11/1 Flutter エラー・バグ日記
AdMob(google_mobile_ads)を導入し、画面の下部にバナー広告を表示した状態で、画面内のボタンタップ時にダイアログを表示するときにも画面上部にバナー広告を表示するようにしたところ、以下のようなエラーが発生。
The following assertion was thrown building AdWidget(dirty, state: _AdWidgetState#18c5b):
This AdWidget is already in the Widget tree
If you placed this AdWidget in a list, make sure you create a new instance in the builder function with a unique ad object.
Make sure you are not using the same ad object in more than one AdWidget.
既にウィジェットツリーに広告ウィジェット(AdWidget)が存在しているため、二重では表示できないよ、ということらしい。
ネットで調べると、別の広告IDのバナーを表示すれば良い、という情報もあったが、AdMobに広告ユニットを追加しなければならないので、他の方法がないか模索。
結果、使用する広告ID自体は同じだが、その広告IDを代入するプロパティ(ゲッター)を、画面下部用とダイアログ表示時用の2つ用意し、それぞれをBannerAdクラスのadUnitId属性の引数として与える形で、BannerAdクラスのインスタンスを2つ作成したらうまく行った。
エラーメッセージをよく読んだら、「新しいインスタンスを作成せよ」とあるので、対処法がきちんと表示されていた。。(後で気づきましたm(_ _)m)
\一般的なエラー対処法をまとめた記事はこちら/
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/