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?