0

我想重新创建旧的 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 小部件很重要,这样横幅就不会被某些系统导航栏覆盖。

4

0 回答 0