【发布时间】:2019-07-19 02:49:32
【问题描述】:
我正在尝试向我的应用添加横幅广告。我希望横幅显示在我的应用程序的某些页面上,但是一旦您到达某些页面,我希望横幅消失。所以我让我的横幅出现并且它正在工作。我还发现使用
super.dispose();
myBanner?.dispose();
在我的按钮上的 onPressed 将摆脱横幅。但是,当我弹回加载横幅的页面时,出现错误:
I/flutter (7058):处理手势时抛出以下断言: I/flutter (7058): 'package:firebase_admob/firebase_admob.dart': 断言失败: line 227 pos 12: '_allAds[id] != I/flutter (7058): null': 不正确。
然后我不能点击在 onPressed 上有我处置的任何按钮。
我尝试添加 super.dispose(),因为我只有 myBanner?.dispose();以前,但结果是一样的。我很难找到关于 admobs 的大量信息。
这是我设置横幅的方式:
BannerAd myBanner = BannerAd(
// Replace the testAdUnitId with an ad unit id from the AdMob dash.
// https://developers.google.com/admob/android/test-ads
// https://developers.google.com/admob/ios/test-ads
adUnitId: adUnitId,
size: AdSize.smartBanner,
targetingInfo: targetingInfo,
listener: (MobileAdEvent event) {
print("BannerAd event is $event");
},
);
然后在我的课堂上:
class EnMainMenu extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MainMenuState();
}
class _MainMenuState extends State<EnMainMenu> {
@override
void initState() {
super.initState();
myBanner
..load()
..show(anchorOffset: 10.0, anchorType: AnchorType.bottom);
}
以及我如何使用我的按钮:
Align(
alignment: Alignment.topRight,
child: Container(
padding: EdgeInsets.all(20),
child: IconButton(
icon: Icon(
Icons.settings,
color: Colors.black45,
size: 40,
),
onPressed: () {
myBanner?.dispose();
super.dispose();
Navigator.of(context).pushNamed('/EnSettings');
},
))),
如果有更好的方法让横幅在某些页面上显示和隐藏,请告诉我。我对扑扑和飞镖很陌生。将来,我还会考虑添加插页式广告。
【问题讨论】:
-
您可以使用
myBanner?.dispose();处理横幅并将其从 dispose 方法中删除。或者将其保留在 dispose 方法中并从按钮单击中删除。我认为它被调用了两次,在按钮单击和小部件处理时。 -
所以我添加了额外的
super.dispose();,而myBanner?.dispose();创建了该错误,并且在我添加super.dispose()后问题仍然存在。是否有某种处理 admob 的隐藏变量? -
实际上我的意思是说,您可能已经调用了两次
myBanner?.dispose(),一次是单击按钮,然后是一次处理方法,使其再次尝试处理,因此错误不能为空,因为它已被处理已经。 -
要使用 dispose 解决这个问题,我是否要更改横幅的加载方式,以便在弹出窗口中加载新的横幅?有这个吗?
void initState() { super.initState(); myBanner ..load() ..show(anchorOffset: 10.0, anchorType: AnchorType.bottom); } -
同样的问题,你解决了吗?