Flutter firebase_admob 横幅仍然显示在每个屏幕上

Flutter firebase_admob banner is still shown on every screen

我在 flutter 项目中使用 firebase_admob 包,当我在第一个屏幕上加载并显示横幅广告时,它已正确加载和显示,但是当我导航到一个新屏幕时,它没有不包含横幅,旧横幅仍显示在新屏幕上,

这是在 initState() 中调用的横幅的创建代码

BannerAd createBannerAd() {
    return BannerAd(
        adUnitId: BannerAd.testAdUnitId,
        //Change BannerAd adUnitId with Admob ID
        size: AdSize.smartBanner,
        targetingInfo: AdsUtil.targetingInfo,
        listener: (MobileAdEvent event) {
          if (event == MobileAdEvent.loaded) {
            // dispose after you received the loaded event seems okay.
            if (mounted) {
              _bannerAd..show();
              setState(() {
                isBannerShown = true;
              });
            } else {
              _bannerAd = null;
              setState(() {
                isBannerShown = false;
              });
            }
          } else if (event == MobileAdEvent.failedToLoad) {
            _bannerAd = null;
            setState(() {
              isBannerShown = false;
            });
          }
          //  print("********** ********** BannerAd $event");
        });
  }
@override
  void dispose() {
    _bannerAd.dispose();
    super.dispose();
  }

导航到第二屏代码:

    IconButton(
                    icon: Icon(Icons.settings),
                    onPressed: () {
                      Navigator.of(context).pushNamed(SettingsPage.routeName);
                    },
                  ),

我想找到一个解决方案,当我导航到新屏幕时,旧横幅会被破坏并且不会显示在我导航到的新屏幕中。

谢谢

当您推送一个新页面时,dispose 方法不会被调用,原生 adView 将作为覆盖小部件保留在下一个屏幕上,因为它不是小部件树的一部分。您需要跟踪页面,然后加载横幅并根据页面更改处理它,并在页面重新加载时重新加载广告。
所以不用推送页面,用新页面替换它就能解决问题
您可以创建 RouteObserver 并跟踪页面更改。检查 this 答案。