如何解决“断言失败:第227行pos 12行:'_allAds [id]!= null':不正确”。

时间:2019-07-19 02:49:32

标签: flutter dart admob banner

我正在尝试将横幅广告添加到我的应用中。我希望横幅广告显示在应用程序的某些页面上,但是一旦您到达某些页面,我希望横幅广告消失。因此,我正在显示横幅,该横幅正在运行。我还发现使用

super.dispose();
myBanner?.dispose();

在onPressed上的按钮上,将删除横幅。但是,当我跳回到加载横幅的页面时,出现错误:

  

I / flutter(7058):处理手势时引发了以下断言:   I / flutter(7058):'package:firebase_admob / firebase_admob.dart':失败的断言:第227行pos 12:'_allAds [id]!=   I / flutter(7058):null':不正确。

然后,我无法单击已将其置于onPressed上的任何按钮。

我尝试添加super.dispose(),因为我只有myBanner?.dispose();以前,但是结果是一样的。我很难找到有关admob的大量信息。

这是我设置横幅的方法:

    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');
                      },
                    ))),

如果有更好的方法可以使横幅在某些页面上显示和隐藏,请告诉我。我是飞镖和飞镖的新手。将来,我还会考虑添加插页式广告。

2 个答案:

答案 0 :(得分:2)

库中的这个声明很烦人。
除了处理横幅广告之外,他们没有提供任何隐藏横幅广告的方法,而且我经常被这个主张咬住...

我的解决方法是(严重):

try {
    _bannerAd?.dispose();
  } catch (ex) {}

答案 1 :(得分:0)

我通过注释//assert(_allAds[id] != null);文件中的firebase_admob.dart来解决此问题。我不确定这是否是最好的解决方案,但对我来说效果很好。