我想重新创建旧的 firebase_admob 包的行为,它会在每个屏幕的顶部显示一个覆盖横幅。
github 上的一位用户在 issue #60上建议的这段代码几乎符合我的意图:
runApp(
Directionality(
textDirection: TextDirection.ltr,
child: Stack(children: [
MaterialApp(home: MyApp()),
Container(
padding: EdgeInsets.only(bottom: 10.0),
alignment: Alignment.bottomCenter,
child: BannerAdWidget(AdSize.banner),
)
])));
总体思路是在 MaterialApp 上进行导航,同时横幅保持在底部。但是,我不能用 SafeArea 小部件包装 Stack。我收到此错误:
从传递给 MediaQuery.of() 的上下文开始,找不到 MediaQuery 祖先。这可能是因为您没有添加 WidgetsApp、CupertinoApp 或 MaterialApp 小部件(这些小部件引入了 MediaQuery),或者如果您使用的上下文来自这些小部件上方的小部件,则可能会发生这种情况。
事实上,如果我用 SECOND MaterialApp 包装 SafeArea,它会起作用。但我认为拥有两个 MaterialApp 小部件根本不是一个好习惯。
runApp(
MaterialApp(
home: SafeArea(
child: Stack(children: [
MaterialApp(home: MyApp()),
Container(
padding: EdgeInsets.only(bottom: 10.0),
alignment: Alignment.bottomCenter,
child: BannerAdWidget(AdSize.banner),
)
]),
),
));
我认为拥有这个 SafeArea 小部件很重要,这样横幅就不会被某些系统导航栏覆盖。