Flutter firebase_admob 横幅仍然显示在每个屏幕上
Flutter firebase_admob banner is still shown on every screen
我在 flutter 项目中使用 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
并跟踪页面更改。检查 this 答案。
我在 flutter 项目中使用 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
并跟踪页面更改。检查 this 答案。