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

Flutter ListView.builder如何实现横向滚动每页1项并显示前后项预览

解决方法

你可以通过调整ListView的内边距、item宽度和滚动物理属性实现效果,也可以直接用PageView更简单地实现需求,两种方案如下:

方案1:修改现有ListView实现

需要修改3处配置:

  • 给ListView添加左右对称的内边距,用于首尾项的侧边露出
  • 调整每个item的宽度,使其小于屏幕宽度,留出相邻项的显示空间
  • 替换滚动物理效果,适配非全屏宽度的分页滚动

修改后代码示例:

// 先获取屏幕宽度
final screenWidth = MediaQuery.of(context).size.width;
// 定义你想要的左右露出区域宽度,可自行调整
final previewWidth = 20.0;
// 单个卡片的实际宽度
final itemWidth = screenWidth - previewWidth * 2;

Container(
  height: 240,
  alignment: Alignment.center,
  child: ListView.builder(
    scrollDirection: Axis.horizontal,
    shrinkWrap: true,
    // 添加左右内边距,保证首项左边和末项右边有露出空间
    padding: EdgeInsets.symmetric(horizontal: previewWidth),
    // 替换为适配自定义页宽的分页物理效果
    physics: PageScrollPhysics(viewPortFraction: itemWidth / screenWidth),
    itemCount: homeState.questionList.length,
    itemBuilder: (context, index) => Container(
      // 外层item宽度改为计算好的itemWidth
      width: itemWidth,
      child: Center(
        child: Container(
          width: double.infinity,
          decoration: const BoxDecoration(
            borderRadius: BorderRadius.all(Radius.circular(17.7)),
            color: Color(0xff181818),
          ),
          child: Text(questionList[index].text),
        ),
      ),
    ),
  ),
)

方案2:使用PageView.builder实现(更推荐)

PageView天生支持分页滚动,自带viewportFraction参数可以直接控制单页占视口的比例,实现起来更简洁:

final screenWidth = MediaQuery.of(context).size.width;
final previewWidth = 20.0;

Container(
  height: 240,
  alignment: Alignment.center,
  child: PageView.builder(
    scrollDirection: Axis.horizontal,
    // 单页占视口的比例,自动留出前后露出空间
    viewportFraction: (screenWidth - previewWidth * 2) / screenWidth,
    // 开启分页对齐
    pageSnapping: true,
    itemCount: homeState.questionList.length,
    itemBuilder: (context, index) => Container(
      padding: EdgeInsets.symmetric(horizontal: previewWidth / 2),
      child: Container(
        decoration: const BoxDecoration(
          borderRadius: BorderRadius.all(Radius.circular(17.7)),
          color: Color(0xff181818),
        ),
        child: Text(questionList[index].text),
      ),
    ),
  ),
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:24:05