我正在使用 firebase_admob 插件进行颤动。一个令人不快的特性是,banner 不能像常规的 widget 一样嵌入到 widget 树中,banner 会叠加在整个应用程序的顶部。但是您可以将捕捉设置到顶部并沿 Y 轴偏移。
但是在这里我遇到了一个问题,我找不到合适的偏移量。在 android 中,一切似乎都很好,我只获得了 body 中第一个小部件的 Y 位置(在 Scaffold 中),这就是偏移量。但是在 iOS 中,您还需要从上面添加一个缩进到这个显示时钟的位置。
正如您在屏幕截图中看到的那样,横幅将稍微适合 AppBar,但应严格位于其下方。
小部件的短代码如下:
GlobalKey _widgetForAdsStickingKey = GlobalKey();
@override
void initState() {
super.initState();
_bannerAd = buildBannerAd()..load();
}
_getTopOffset() {
final rBox =
_widgetForAdsStickingKey.currentContext.findRenderObject() as RenderBox;
final pos = rBox.localToGlobal(Offset.zero).dy;
var offset = pos;
if (Platform.isIOS) {
offset = pos + MediaQuery.of(context).padding.top;
}
return offset;
}
BannerAd buildBannerAd() {
return BannerAd(
adUnitId: BannerAd.testAdUnitId,
size: AdSize.banner,
listener: (MobileAdEvent event) {
if (event == MobileAdEvent.loaded) {
setState(() {
_add_is_loaded = true;
});
_bannerAd
..show(anchorType: AnchorType.top, anchorOffset: _getTopOffset());
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text('Zeit verfolgen'),
),
backgroundColor: backgroundColor,
body: Center(
key: _widgetForAdsStickingKey,
child: SingleChildScrollView(
child: Padding(
...
因此,在该方法中,_getTopOffset()
我获取了 Center 小部件的 Y 位置,即 body 的根,并将从上方到 appbar 的缩进添加到此值。但是 iPhone 上的横幅与 appbar 有点重叠。
也许我错误地计算了从屏幕开始到应用程序区域开始的距离MediaQuery.of(context).padding.top
?还是我没有考虑其他影响高度的参数?帮助如何正确计算横幅的偏移量,以使横幅不与 AppBar 重叠。