Dart 颤振admob show()方法重新构建/&引用;页
我写了一个非常简单的应用程序来尝试“admob”插件。但是,我有一个关于Dart 颤振admob show()方法重新构建/&引用;页,dart,admob,flutter,Dart,Admob,Flutter,我写了一个非常简单的应用程序来尝试“admob”插件。但是,我有一个关于\u bannarad..load()…show()的问题 我运行应用程序首先打开Home()类,然后按下按钮打开其他屏幕(StateAdeExample)。然后,当我按SHOW BANNER按钮时,它会显示我的横幅,但在admob再次重建我的主页()之前,它会显示StateAdeExample()。我可以看到我的打印(“----/”)在App.dart中 我只想重新构建我的StateAdeExample类() App.da
\u bannarad..load()…show()的问题
我运行应用程序首先打开Home()类,然后按下按钮打开其他屏幕(StateAdeExample)。然后,当我按SHOW BANNER按钮时,它会显示我的横幅,但在admob再次重建我的主页()之前,它会显示StateAdeExample()。我可以看到我的打印(“----/”)当我按下显示横幅按钮时,代码>在App.dart中
我只想重新构建我的StateAdeExample类()
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;
}}
霍姆·达特
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");
},
),
],
);
}),
);
}
}
class Home扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:ScopedModelSchendant(
重建改变:错误,
生成器:(BuildContext上下文、小部件小部件、AdScoped模型){
返回列(
儿童:[
升起的按钮(
子项:文本(“2.屏幕”),
已按下:(){
Navigator.pushNamed(上下文,“/stateAdExapmle”);
},
),
],
);
}),
);
}
}
StateAdeExample.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;
}),
],
),
);
}
}
const String testDevice='YOUR_DEVICE_ID';
类stateExample扩展StatefulWidget{
@凌驾
_StateAdExapmleState createState()=>_StateAdExapmleState();
}
类_StateAdExapmleState扩展状态{
静态最终MobileAdTargetingInfo targetingInfo=新MobileAdTargetingInfo(
testDevices:testDevice!=null?[testDevice]:null,
关键词:['foo','bar'],
contentUrl:'http://foo.com/bar.html',
生日:新的日期时间。现在(),
对,,
性别:MobileAdGender.male,
非人格化爸爸:没错,
);
班纳拉德(BannerAd);;
BannerAd createBannerAd(){
返回新的横幅(
adUnitId:BannerAd.testAdUnitId,
大小:AdSize.banner,
targetingInfo:targetingInfo,
侦听器:(MobileAdEvent事件){
打印(“BannerAd事件$event”);
},
);
}
@凌驾
void initState(){
super.initState();
FirebaseAdMob.instance.initialize(appId:FirebaseAdMob.testAppId);
_bannerAd=createBannerAd()…load();
}
@凌驾
无效处置(){
_bannerAd?.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:专栏(
儿童:[
升起的按钮(
子项:常量文本('SHOW BANNER'),
已按下:(){
_bannerAd???=createBannerAd();
_班纳拉德
…加载()
…显示();
}),
升起的按钮(
子项:const Text('REMOVE BANNER'),
已按下:(){
_bannerAd?.dispose();
_bannerAd=null;
}),
],
),
);
}
}
如何解决此问题?这很正常,没有问题problem@RémiRousselet这可能是正常的,但我的fetch()或其他数据函数在每次生成时都会再次运行,因此我遇到了这个问题。请参阅@RémiRousselet非常感谢,这是一篇非常好的帖子。@RémiRousselet我想再问一件事,我使用的是作用域模型,因此没有initState()函数。如何将其移出build()方法或scopedModelSecondant()方法。