Flutter运行TextField代码报RenderBox was not laid out错误如何解决
报错根因
这是Flutter布局约束冲突导致的典型问题:
Row的子元素默认没有明确的宽度约束,而TextField在无宽度限制时会默认尝试占满父级的最大可用宽度,二者逻辑冲突导致布局计算失败,最终抛出RenderBox未完成布局的异常。
修复方案
用Expanded组件包裹TextField外层的Container,明确告诉布局系统该组件占用Row内的剩余可用空间即可。
修复后代码示例
@override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: Row( children: <Widget>[ Expanded( child: Container( // padding: EdgeInsets.all(30), 可按需开启 child: TextField( style: TextStyle( color: Colors.black, ), decoration: kCityTextFieldInputDecoration, ), ), ), ], ), ), ); }
其他可选方案
如果不需要TextField占满Row剩余空间,也可以直接给外层Container指定固定宽度,同样能解决约束冲突:
Container( width: 250, // 自定义固定宽度 child: TextField(/* 原有配置 */), )
内容的提问来源于stack exchange,提问作者Usama Bin Tahir
相关产品推荐
相关产品推荐

