You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Admob横幅广告仅在initState中打断点时才展示问题求助

问题根源

你代码的执行时序存在错误:广告加载逻辑写在initState中会在页面初始化时立即执行,但此时MobileAds SDK的初始化逻辑是放在FutureBuilder中异步执行的,SDK未完成初始化就调用_bannerAd.load()会导致广告加载直接失败。加断点时会阻塞代码执行,给SDK留出了初始化完成的时间,所以断点场景下广告可以正常加载。

解决方案

1. 提前初始化广告SDK

将SDK初始化逻辑移到应用启动阶段,保证进入页面前SDK已完成初始化:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 等待广告SDK初始化完成再启动应用
  await MobileAds.instance.initialize();
  runApp(const MyApp());
}

2. 删除冗余的FutureBuilder封装

SDK已经提前初始化完成,无需在页面组件中再嵌套异步初始化逻辑,直接改造页面构建逻辑即可:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text(widget.title),
    ),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          if (_isBannerAdReady)
            Align(
              alignment: Alignment.topCenter,
              child: SizedBox(
                width: _bannerAd.size.width.toDouble(),
                height: _bannerAd.size.height.toDouble(),
                child: AdWidget(ad: _bannerAd),
              ),
            ),
          const Text("Here goes the rest of the app"),
        ],
      ),
    ),
  );
}

原来的buildAdWidget方法和_initGoogleMobileAds方法可以直接删除。

额外校验项

如果修改后仍有问题,可以先检查控制台是否输出onAdFailedToLoad对应的错误日志,核对广告测试ID是否配置正确,Android/iOS端的广告相关权限、元数据配置是否符合要求。

内容的提问来源于stack exchange,提问作者D. Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:48:02