Flutter关闭插屏广告后跳转下一页的代码修复方案
问题根因
原有代码存在两个核心问题导致逻辑不符合预期:
- 广告触发判断逻辑错误:原有判断条件
clickCount == 1 || clickCount % 3 == 0会在第1、3、6、9…次点击触发广告,和「每3次为一个周期、仅周期内第1次(即第1、4、7…次点击)触发广告」的规则不符 - 广告关闭后无跳转逻辑:原有逻辑触发广告后直接return,没有监听广告关闭事件,广告播放完关闭后不会执行跳转代码,因此会停留在当前页面
修复方案
- 修正广告触发频次的判断逻辑,对齐3次一周期、仅周期首击触发广告的规则
- 改造插屏广告展示方法,增加广告关闭/展示失败的回调,广告流程结束后自动触发跳转
- 增加异常兜底,广告加载失败、展示失败时直接跳转,避免卡住用户操作
完整修复代码
首先改造插屏广告展示方法,增加关闭回调支持:
// 插屏广告展示方法,新增广告关闭回调参数 void _showInterstitialAd({required VoidCallback onAdClosed}) async { // 保留你原有的广告初始化、加载逻辑,仅补充事件回调 if (interstitialAd == null) { // 广告未加载完成时直接执行跳转,避免阻塞用户操作 onAdClosed(); return; } interstitialAd!.fullScreenContentCallback = FullScreenContentCallback( onAdDismissedFullScreenContent: (ad) { // 用户主动关闭广告 ad.dispose(); interstitialAd = null; // 执行跳转逻辑 onAdClosed(); // 此处可补充你原有的预加载下一条插屏广告的逻辑 }, onAdFailedToShowFullScreenContent: (ad, error) { // 广告展示失败 ad.dispose(); interstitialAd = null; // 兜底执行跳转 onAdClosed(); }, ); interstitialAd!.show(); }
再修改卡片点击逻辑:
CategoryCardWithImage( title: "networks", image: "assets/images/networks.png", press: () { // 统一抽离跳转逻辑,避免重复代码 void jumpToTargetPage() { Navigator.push( context, MaterialPageRoute(builder: (context) => const NetworksPage()), ); } clickCount++; // 修正触发规则:点击次数对3取余等于1时(1、4、7…次),即为每个周期的第1次点击 bool shouldShowAd = clickCount % 3 == 1; if (shouldShowAd) { _showInterstitialAd(onAdClosed: jumpToTargetPage); return; } // 周期内第2、3次点击直接跳转 jumpToTargetPage(); }, ),
逻辑校验
修复后点击行为完全符合预期:
- 第1次点击:触发广告,广告关闭后自动跳转
- 第2次点击:直接跳转
- 第3次点击:直接跳转
- 第4次点击:进入下一周期,触发广告,关闭后跳转,后续循环执行该规则
内容的提问来源于stack exchange,提问作者Me too
相关产品推荐
相关产品推荐

