【问题标题】:Flutter firebase_admob banner is still shown on every screenFlutter firebase_admob 横幅仍然显示在每个屏幕上
【发布时间】:2020-09-11 07:44:26
【问题描述】:

我在颤振项目中使用 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);
                    },
                  ),

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

谢谢

【问题讨论】:

  • 你能在显示广告的地方显示代码吗?
  • 1.您是否在页面转换期间/之前推动了热重载? 2. 它是在调试期间发生还是在发布应用程序中也发生?我怀疑它正在发生,因为 adview 被呈现为本机视图并且由于某种原因它没有被处理。
  • @Adnankarim :我在问题中显示的 createBannerAd() 方法中显示添加:_bannerAd..show();
  • @SanjaySharma 即使在发布应用程序中也没有处理,我可以在 WillPopScope 上处理横幅,但是当我返回第一个屏幕时,它将无法显示横幅。
  • 可以分享屏幕间导航的代码吗?

标签: flutter admob ads


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多