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

Flutter中Row放GridView与ExpansionPanelList报RenderBox was not laid out错误如何解决

问题原因

这个RenderBox was not laid out报错是因为Row布局时右侧的ExpansionPanelList没有拿到合法的尺寸约束:

  • 你给ExpansionPanelPage内部的Container写死了width:10、height:10,完全不足以承载ExpansionPanel的内容,导致布局计算时尺寸溢出
  • Row布局中左侧GridView已经用Expanded占满剩余空间,右侧的ExpansionPanelPage没有指定宽度约束,而ExpansionPanel默认会尝试占满父级最大可用宽度,两者冲突导致布局无法完成计算
修复方案

按以下步骤修改代码即可:

  1. 给右侧ExpansionPanelPage增加宽度约束:在Row中给它套一层Expanded,通过flex值分配左右两部分的宽度占比,修改_MyHomePageState的build代码:
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text("this is title"),
    ),
    body: Container(
        child: Row(
      children: <Widget>[
        Expanded(
          flex: 2, // 左侧占2份宽度,可按需调整
          child: buildGrid(),
        ),
        Expanded(
          flex: 1, // 右侧占1份宽度,总宽度为3份,可按需调整
          child: ExpansionPanelPage(UniqueKey()),
        ),
      ],
    )),
  );
}
  1. 修改ExpansionPanelPage内部的Container属性,去掉写死的过小宽高,让它撑满父级分配的空间:
@override
Widget build(BuildContext context) {
  return SingleChildScrollView(
    child: Container(
      // 移除width:10、height:10的写死配置
      child: _buildPanel(),
    ),
  );
}

修改完成后重新运行即可正常实现左侧GridView、右侧可折叠面板的布局效果,两个区域滚动互不干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:39:03