Admob横幅,如何仅在首页显示

时间:2018-06-21 15:55:58

标签: admob flutter

我成功在页脚上显示了智能横幅,然后对其进行了处置。我的问题是该应用程序的所有页面上均显示。

我的问题是:如何仅在一页上显示?

@override
 void initState() {
   super.initState();
   myBanner
   ..load().then((loaded) {
     if (loaded && this.mounted) {
       myBanner..show();
     }
   });

 }

5 个答案:

答案 0 :(得分:1)

如果您有多个充当单个屏幕的小部件,则只需包含该部分

@override void initState() { 
    super.initState(); 
    myBanner ..load().then((loaded) { 
        if (loaded && this.mounted) { 
            myBanner..show(); 
        } 
    }); 
}

您可能需要处理它:

@override
  void dispose() {
    myBanner?.dispose();
    super.dispose();
}

答案 1 :(得分:0)

将广告添加到我的应用程序时,我遇到了同样的问题。就我而言,我正在调用我的方法以在didChangeDependencies函数中显示横幅广告。该方法可以被该应用多次调用,我发现(在我的应用中)当您将一条新路线推到Navigator时会调用该方法,这就是为什么在我移至另一条横幅时调用显示横幅的原因我的应用程序的屏幕。也许您有类似的实现方式。

答案 2 :(得分:0)

我从Github链接here找到了可行的解决方案。这个想法很简单。

  1. 首先,您需要一个Ads助手类。您可以点击链接或参阅下文。
  2. 在您要展示广告的页面的showBannerAd内致电initState()
  3. 按下页面后,像下面的代码片段一样呼叫showBannerAd。从推送的页面返回后,这将再次显示广告。
Navigator.push(context, MaterialPageRoute(builder: (context) => EditPage())).then((value) {
                      Ads.showBannerAd();
                    });
  1. 在您不想显示广告的推送页面hideBannderAd内致电initState()。这样就完成了。

我的广告助手类

import 'package:firebase_admob/firebase_admob.dart';

const String testDevice = 'YOUR_DEVICE_ID';

class Ads {
  static BannerAd _bannerAd;

  static void initialize() {
    FirebaseAdMob.instance.initialize(appId: FirebaseAdMob.testAppId);
  }

  static const MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo(
    testDevices: testDevice != null ? <String>[testDevice] : null,
    keywords: <String>['foo', 'bar'],
    contentUrl: 'http://foo.com/bar.html',
    childDirected: true,
    nonPersonalizedAds: true,
  );

  static BannerAd _createBannerAd() {
    return BannerAd(
      adUnitId: BannerAd.testAdUnitId,
      size: AdSize.banner,
      targetingInfo: targetingInfo,
      listener: (MobileAdEvent event) {
        print("BannerAd event $event");
      },
    );
  }

  static void showBannerAd() {
    if (_bannerAd == null) _bannerAd = _createBannerAd();
    _bannerAd
      ..load()
      ..show(anchorOffset: 0.0, anchorType: AnchorType.bottom);
  }

  static void hideBannerAd() async {
    await _bannerAd.dispose();
    _bannerAd = null;
  }
}

答案 3 :(得分:0)

您可以使用await等待第二页的弹出

   bannerAd.dispose();
await Navigator.pushNamed(context, f['route']);
       intialzeAdd(); 

intialiazeAdd在第二次监听弹出后被调用

答案 4 :(得分:0)

打电话

Navigator.pop();

在调用 Navigator.push() 之前。这将解决您的问题