2

I wrote a very simple app for try "admob" plugin. But, I have a problem about _bannerAd ..load()..show(); in StateAdExample() class.

I run app first of all Home() class is opened and I press button to openmy other screen(StateAdExample). Then, when I press SHOW BANNER button, it shows me my banner but before admob again re-build my Home() then StateAdExample(). I can see my print("----- /"); in App.dart when I press SHOW BANNER button.

I just want re-build only my StateAdExample class().

App.dart

Route routes(RouteSettings settings) {
switch (settings.name) {
  case "/":
    return MaterialPageRoute(
        settings: settings,
        maintainState: true,
        builder: (BuildContext context) {
          print("----- /");
          return Home();
        });
    break;
  case "/stateAdExapmle":
    return MaterialPageRoute(
        settings: settings,
        builder: (BuildContext context) {
          print("----- /stateAdExapmle");
          return StateAdExample();
        });
    break;
  default:
    return null;
}}

Home.dart

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: ScopedModelDescendant(
          rebuildOnChange: false,
          builder: (BuildContext context, Widget widget, AdScoped model) {
            return Column(
              children: <Widget>[
                RaisedButton(
                  child: Text("2.Screen"),
                  onPressed: () {
                    Navigator.pushNamed(context, "/stateAdExapmle");
                  },
                ),
              ],
            );
          }),
    );
  }
}

StateAdExample.dart

const String testDevice = 'YOUR_DEVICE_ID';

class StateAdExample extends StatefulWidget {
  @override
  _StateAdExapmleState createState() => _StateAdExapmleState();
}

class _StateAdExapmleState extends State<StateAdExample> {
  static final MobileAdTargetingInfo targetingInfo = new MobileAdTargetingInfo(
    testDevices: testDevice != null ? <String>[testDevice] : null,
    keywords: <String>['foo', 'bar'],
    contentUrl: 'http://foo.com/bar.html',
    birthday: new DateTime.now(),
    childDirected: true,
    gender: MobileAdGender.male,
    nonPersonalizedAds: true,
  );

  BannerAd _bannerAd;

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

  @override
  void initState() {
    super.initState();
    FirebaseAdMob.instance.initialize(appId: FirebaseAdMob.testAppId);
    _bannerAd = createBannerAd()..load();
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        children: <Widget>[
          RaisedButton(
              child: const Text('SHOW BANNER'),
              onPressed: () {
                _bannerAd ??= createBannerAd();
                _bannerAd
                  ..load()
                  ..show();
              }),
          RaisedButton(
              child: const Text('REMOVE BANNER'),
              onPressed: () {
                _bannerAd?.dispose();
                _bannerAd = null;
              }),
        ],
      ),
    );
  }
}

How can I resolve this issue?

Joel
  • 1,564
  • 7
  • 12
  • 20
mfv
  • 171
  • 1
  • 1
  • 8

0 Answers0