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默认会尝试占满父级最大可用宽度,两者冲突导致布局无法完成计算
修复方案
按以下步骤修改代码即可:
- 给右侧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()), ), ], )), ); }
- 修改ExpansionPanelPage内部的Container属性,去掉写死的过小宽高,让它撑满父级分配的空间:
@override Widget build(BuildContext context) { return SingleChildScrollView( child: Container( // 移除width:10、height:10的写死配置 child: _buildPanel(), ), ); }
修改完成后重新运行即可正常实现左侧GridView、右侧可折叠面板的布局效果,两个区域滚动互不干扰。
内容的提问来源于stack exchange,提问作者QW Tang
相关产品推荐
相关产品推荐

