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

如何设置Flutter按钮:首次点击显示插页广告,二次点击执行其他操作

Flutter按钮插页广告优先触发及点击逻辑优化

核心思路

  • 添加状态变量追踪按钮点击状态,区分首次与非首次点击
  • 让插页广告支持关闭回调,确保广告操作完成后再执行后续逻辑
  • 重构按钮点击事件,分场景处理广告展示与业务操作

修改后的完整代码

首先在你的State类中添加状态变量:

bool _isFirstClick = true;

然后修改插页广告方法,增加关闭回调(以AdMob为例,可替换为你使用的广告SDK逻辑):

void _showInterstitialAd({VoidCallback? onAdClosed}) {
  InterstitialAd.load(
    adUnitId: '你的广告单元ID',
    request: const AdRequest(),
    adLoadCallback: InterstitialAdLoadCallback(
      onAdLoaded: (ad) {
        ad.fullScreenContentCallback = FullScreenContentCallback(
          onAdDismissedFullScreenContent: (ad) {
            ad.dispose();
            // 广告关闭后触发后续逻辑
            onAdClosed?.call();
          },
          onAdFailedToShowFullScreenContent: (ad, err) {
            ad.dispose();
            // 广告显示失败也执行回调,避免用户操作卡住
            onAdClosed?.call();
          },
        );
        ad.show();
      },
      onAdFailedToLoad: (err) {
        // 广告加载失败同样触发回调
        onAdClosed?.call();
      },
    ),
  );
}

最后重构弹窗按钮的点击逻辑:

void showPopUpButton(BuildContext context) {
  showDialog(
    context: context,
    builder: (context) => Dialog(
      backgroundColor: Colors.transparent,
      child: IconButton(
        icon: Image.asset('lib/images/last.png'),
        iconSize: 260,
        onPressed: () async {
          if (_isFirstClick) {
            // 首次点击:仅展示插页广告,关闭后返回菜单并更新状态
            _showInterstitialAd(onAdClosed: () {
              Navigator.pop(context);
              setState(() {
                _isFirstClick = false;
              });
            });
          } else {
            // 非首次点击:执行原有业务操作
            setState(() {});
            initRandomImage();
            Navigator.pop(context);

            final player = AudioPlayer();
            await player.play(AssetSource('Sound1.wav'), volume: 1.0);
          }
        },
      ),
    ),
  ).then((_) {
    // 弹窗关闭后重置点击状态,下次打开弹窗仍保持首次点击逻辑
    setState(() {
      _isFirstClick = true;
    });
  });
}

关键说明

  • 广告优先触发:首次点击时仅执行广告展示逻辑,原有业务操作完全延后到广告关闭后(或非首次点击)
  • 状态重置:通过showDialog的then方法,在弹窗关闭后重置点击状态,保证每次打开弹窗的首次点击都触发广告
  • 异常处理:广告加载/展示失败时仍执行回调,避免用户点击后无响应

内容的提问来源于stack exchange,提问作者TYS86

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:45:29