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

Flutter ListView.builder中自定义绘制列表项不显示问题

问题根因

你的自定义绘制组件无法在ListView中显示的核心原因是noteWidget没有设置显式宽高约束:

  • 直接作为Scaffold的body使用时,Stack会自动填充body的可用空间,子Container可以拿到完整的宽高尺寸,CustomClipper可以基于这个尺寸正常计算绘制路径
  • 作为ListView.builder的列表项使用时,列表项默认没有固定宽高约束,你内部的Container也未指定尺寸,最终组件拿到的高度为0,CustomClipper计算时所有Y轴坐标都会被缩放到0,自然无法渲染出任何内容

解决方法

给noteWidget外层加固定尺寸约束即可,尺寸和你自定义Clipper的原设计尺寸匹配即可,修改后的代码如下:

Widget noteWidget() {
  // 显式指定组件宽高,如需要占满列表宽度可将width改为double.infinity
  return SizedBox(
    width: 304,
    height: 93,
    child: Stack(
      children: [
        ClipShadowPath(
          shadow: BoxShadow(
              color: Color(0x26000000), offset: Offset(0, 1), blurRadius: 3),
          clipper: NoteBoxCustomeClipper(),
          child: Container(
            color: Colors.white,
          ),
        ),
        ClipShadowPath(
          shadow: BoxShadow(
              color: Color(0x26000000), offset: Offset(0, 1), blurRadius: 3),
          clipper: NoteEdgeCustomeClipper(),
          child: Container(
            color: Colors.white,
          ),
        ),
      ],
    ),
  );
}

修改后重新运行即可在ListView.builder中正常渲染出你的自定义组件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:27:03