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

Flutter ListView仅渲染列表1个子元素的问题排查

可能的原因如下
  • 全局列表引用被反复覆盖
    你代码中dataRowsForCompletedExercises = [];写在for循环内部,每次遍历都会清空这个类级别/全局的列表,而你生成的_completedExercisesDataTableWidget如果是直接引用这个列表构建内容,所有添加到completedExercisesWidgetsList的组件都会共享同一个列表实例。后续循环清空列表时,前面已经添加的组件的内容也会同步被清空,只有最后一次循环生成的组件能保留数据,视觉上就只显示1个元素。
    修复方案:每次循环单独创建新的行列表,把当前练习的行列表作为参数传给_completedExercisesDataTableWidget,不要用共享的全局变量存储行数据。
  • 条件判断导致大部分组件无内容
    你代码中if (!(doc.id == exerciseId))的判断如果仅1个doc满足,剩下5个doc遍历后dataRowsForCompletedExercises始终为空,对应的_completedExercisesDataTableWidget没有可渲染的行,高度为0,视觉上无法观测到,看起来就像只渲染了1个。
  • 布局约束异常
    如果你返回的ListView嵌套在其他滚动组件(如另一个ListView、SingleChildScrollView)中,即使设置了shrinkWrap: true,也可能出现高度计算错误,仅第一个组件能正常撑开高度,后续组件高度被压缩为0无法显示。
  • 组件高度占满视口
    如果_completedExercisesDataTableWidget的高度被设置为父容器最大高度,第一个组件会占满整个ListView的可视区域,后续组件需要手动滚动才能看到,容易被误认为没有渲染。
  • Key重复导致渲染异常
    如果所有_completedExercisesDataTableWidget使用了相同的Key,Flutter的组件Diff算法会判定它们是同一个组件,仅保留最后一个的状态进行渲染,前面的组件会被忽略。

内容的提问来源于stack exchange,提问作者who-aditya-nawandar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:24:01