颤动:如果视图已被处理,如何防止横幅广告显示

时间:2018-04-14 16:47:48

标签: dart admob flutter

我目前正在尝试使用firebase_admob插件中的横幅广告。显示和处理它们的过程非常简单,我在initState()和dispose()中进行。

创建和显示添加的代码如下所示:

_bannerAd = createBannerAd();
_bannerAd
  ..load().then((loaded) {
    if (loaded) {
      _bannerAd..show();
    }
  });

但是,由于我正在异步调用show(),因此在显示广告时(即通过快速单击后退按钮)视图可能已经关闭。在这种情况下,将永远不会调用dispose()方法,并且广告将“卡在”屏幕底部。

我该如何解决这个问题?我是否使用横幅广告错误,或者是否可以检测视图是否已更改?我尝试使用州的“已安装”属性,但似乎没有用。

2 个答案:

答案 0 :(得分:0)

在显示添加之前,只需检查州级的“this.mounted”属性。

    _bannerAd = createBannerAd();
    _bannerAd
  ..load().then((loaded) {
    if (loaded && this.mounted) {
      _bannerAd..show();
    }
  });

答案 1 :(得分:0)

https://github.com/flutter/flutter/issues/21474#issuecomment-535188820开始,虽然有点hack,但对我有用。

您可以在处理方法中添加一些延迟,如下所示:

static void hideBannerAd() {
  Future.delayed(Duration(milliseconds: 500), () {
    if (_bannerAd != null) _bannerAd.dispose();
    _bannerAd = null;
  });
}

500毫秒就够了。