Flutter嵌套使用ListView.builder可获取数据但UI不显示问题求助
问题核心原因
你代码的核心错误是在嵌套ListView.builder的itemBuilder中错误使用了Expanded组件:
Expanded仅能在Row、Column这类Flex布局的直接子节点中使用,作用是分配父容器的剩余可用空间。但你内层的ListView已经设置了shrinkWrap: true,会根据子元素总高度自适应自身高度,内部item使用Expanded时无法获取到可扩展的高度边界,会触发布局异常,最终导致内容无法渲染。
修复方案
直接删除内层ListView.builder item中包裹的Expanded组件即可,修改后的_getHeader代码如下:
Widget _getHeader(List<Header> listHeader){ return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ Text('INI HEADER TIDAK MASUK LISTVIEW.BUILDER'), ListView.builder( shrinkWrap: true, scrollDirection: Axis.vertical, physics: NeverScrollableScrollPhysics(), itemCount: listHeader.length, itemBuilder: (context, index){ // 移除外层的Expanded即可 return Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Text('${listHeader[index].label} : ${listHeader[index].value}') ], ); } ), ], ); }
其他可选排查点
- 如果外层ListView仍无法显示,确认外层
_buildViewDataReport返回的ListView的父容器是否有明确的高度约束:如果外层是放在Column中,需要给ListView套一层Expanded,避免无限高度约束导致布局失败。 - 调试确认
listReport、listHeader的长度是否大于0,避免空数据导致看不到渲染内容。
内容的提问来源于stack exchange,提问作者farhan
相关产品推荐
相关产品推荐

