我目前正在尝试来自firebase_admob插件的横幅广告。显示和处置它们的过程非常简单,我在 initState(( 和 dispose(( 中执行此操作。
用于创建和显示添加的代码如下所示:
_bannerAd = createBannerAd();
_bannerAd
..load().then((loaded) {
if (loaded) {
_bannerAd..show();
}
});
但是,由于我异步调用 show((,因此在展示广告时视图可能已经关闭(即通过非常快速地单击后退按钮(。在这种情况下,将永远不会调用dispose((方法,并且广告将"卡"在屏幕底部。
如何解决这个问题?我是否错误地使用了横幅广告,或者是否可以检测到视图是否已更改?我尝试使用状态的"mounted"属性,但它似乎不起作用。
只需在显示添加之前检查状态类的"this.mounted"属性。
_bannerAd = createBannerAd();
_bannerAd
..load().then((loaded) {
if (loaded && this.mounted) {
_bannerAd..show();
}
});
从 https://github.com/flutter/flutter/issues/21474#issuecomment-535188820 来看,这是一个小技巧,但它对我有用。
您可以在释放方法中添加一点延迟,如下所示:
static void hideBannerAd() {
Future.delayed(Duration(milliseconds: 500), () {
if (_bannerAd != null) _bannerAd.dispose();
_bannerAd = null;
});
}
500毫秒就足够了。