Flutter添加TextField时报“被调用的构造函数不是const构造函数”求助
错误原因
- 组件嵌套逻辑错误:
Expanded组件只能作为Row、Column、Flex这类弹性布局组件的直接子节点,你当前代码里把Expanded套在了Container内部,Container不属于弹性布局父节点,会触发布局异常,部分版本的Flutter会误抛出const构造函数相关的错误提示。 - 隐式const校验问题:
Text组件拥有const构造函数,而TextField没有const构造函数,如果你代码省略部分的上层父节点加了const修饰符,就会要求所有子组件都具备const构造函数,替换成Text符合const要求所以能正常运行,换成没有const构造的TextField就会抛出对应错误。
解决方案
修正组件嵌套结构,把 Expanded 放到 Row 的直接子节点层级,不要用Container包裹Expanded,把padding逻辑移到TextField外层即可,同时检查所有上层父节点,确认没有给包含TextField的父组件加const修饰符。修改后的对应代码段如下:
Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Icon(Icons.search, size: 36.0), Expanded( child: Container( padding: EdgeInsets.all(3.0), child: TextField( decoration: InputDecoration( hintText: "What are you looking for?", border: InputBorder.none, ), ), ), ), Icon(Icons.account_circle, size: 36.0), ] )
内容的提问来源于stack exchange,提问作者Oleg S
相关产品推荐
相关产品推荐

