我目前正在尝试使用firebase_admob插件中的横幅广告。显示和处理它们的过程非常简单,我在initState()和dispose()中进行。
创建和显示添加的代码如下所示:
_bannerAd = createBannerAd();
_bannerAd
..load().then((loaded) {
if (loaded) {
_bannerAd..show();
}
});
但是,由于我正在异步调用show(),因此在显示广告时(即通过快速单击后退按钮)视图可能已经关闭。在这种情况下,将永远不会调用dispose()方法,并且广告将“卡在”屏幕底部。
我该如何解决这个问题?我是否使用横幅广告错误,或者是否可以检测视图是否已更改?我尝试使用州的“已安装”属性,但似乎没有用。
答案 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毫秒就够了。