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

Flutter ListView每2个Card插入Admob广告异常问题求助

解决Flutter ListView间隔插入广告的问题

你的问题出在两个核心点:

  1. 列表总项数计算错误:原代码仅设置foundUser.length作为itemCount,但插入广告后实际列表项总数应该是原数据长度加上广告的数量。
  2. 索引判断逻辑错误:原逻辑会占用原数据的索引位置,导致后续的CustomCard被广告占位,无法正常加载。

修正后的代码

ListView.builder(
  // 计算实际总项数:原数据数量 + 插入的广告数(每2个Card插1个,广告数为原长度整除2)
  itemCount: foundUser.length + (foundUser.length ~/ 2),
  itemBuilder: (BuildContext context, int index) {
    // 判断当前位置是否为广告位:每3个项(2个Card + 1个广告)的第3个是广告
    if ((index + 1) % 3 == 0) {
      return const CustomBannerAd();
    }
    // 转换为原数据的索引:减去前面已插入的广告数量
    final dataIndex = index - (index ~/ 3);
    return CustomCard(user: foundUser[dataIndex]);
  },
)

逻辑说明

  • 总项数计算:每2个CustomCard后插入1个广告,广告数量等于原数据长度整除2,总项数为原长度加广告数。
  • 广告位判断:利用(index+1)%3==0判断(索引从0开始),确保第3、6、9...位显示广告,对应每2个Card后的位置。
  • 数据索引转换:每遇到一个广告位,原数据索引需要减去前面已插入的广告数量,index ~/ 3可直接得到前面的广告总数。

如果需要调整间隔规则(比如每3个Card插1个广告),只需修改判断条件和总项数的计算方式即可。

内容的提问来源于stack exchange,提问作者Othman Sami Dheyab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:39:53