flutter - Flutter firebase_admob 横幅仍然显示在每个屏幕上
问题描述
我在颤振项目中使用 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
并跟踪页面更改。检查这个答案。
推荐阅读
- reactjs - 如何使用 Redux 实现 React-navigation?
- r - 使用 R data.table 计算所有变量组合和 df 的不同计数
- appium - Android 模拟器 - 登录应用程序后无法执行操作
- python-3.x - python3 和 matplotlib:更改锚定文本的背景颜色
- python - CV2:尝试拍照时出现“[WARN:0] terminating async callback”
- java - AssertEquals 为两个相同的对象返回 false
- javascript - 在 forloop 中使用 .push 的函数不断地为数组赋值
- node.js - 在 AWS Lambda 上发出 https 请求
- alexa - Alexa 接受内置插槽类型的错误值
- mysql - 从外部表中按日期和 id 对 COUNT 进行分组