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

Flutter运行报错RenderBox was not laid out: 'hasSize'如何解决?

错误原因

RenderBox was not laid out: ... hasSize 是Flutter布局中典型的滚动组件嵌套冲突报错:
你在外层AllProducts页面的body中使用了垂直滚动的ListView,内部嵌套的ProductList组件返回的GridView.count默认也具备垂直滚动属性,两个无固定高度的垂直滚动组件嵌套时,内层GridView无法从父级获取到确定的布局高度约束,就会触发hasSize断言失败。

解决方案

两种适配方案按需选择即可:

  • 方案1:让内部GridView跟随外层ListView滚动(最常用,适合整个页面统一滚动的场景)
    给GridView.count添加两个属性:
    GridView.count(
      shrinkWrap: true, // 让GridView高度收缩到适配子元素总高度,不会无限扩张
      physics: const NeverScrollableScrollPhysics(), // 禁用GridView自身滚动,滚动事件交给外层ListView处理
      padding: EdgeInsets.only(left: 20, right: 20),
      crossAxisCount: 2,
      crossAxisSpacing: 18,
      mainAxisSpacing: 18,
      // 其余原有代码保持不变
    )
    
  • 方案2:给ProductList设置固定高度(适合需要商品列表区域固定高度、独立滚动的场景)
    给ProductList里包裹FutureBuilder的Container添加高度属性:
    return Container(
      height: 600, // 自定义固定高度,给内部GridView提供明确的高度约束
      child: FutureBuilder<List<Model>>(
        // 其余原有代码保持不变
      )
    );
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:15:01