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

Flutter关闭插屏广告后跳转下一页的代码修复方案

问题根因

原有代码存在两个核心问题导致逻辑不符合预期:

  • 广告触发判断逻辑错误:原有判断条件clickCount == 1 || clickCount % 3 == 0会在第1、3、6、9…次点击触发广告,和「每3次为一个周期、仅周期内第1次(即第1、4、7…次点击)触发广告」的规则不符
  • 广告关闭后无跳转逻辑:原有逻辑触发广告后直接return,没有监听广告关闭事件,广告播放完关闭后不会执行跳转代码,因此会停留在当前页面
修复方案
  1. 修正广告触发频次的判断逻辑,对齐3次一周期、仅周期首击触发广告的规则
  2. 改造插屏广告展示方法,增加广告关闭/展示失败的回调,广告流程结束后自动触发跳转
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:36:23