Flutter报错:The constructor being called isn't a const constructor 原因及解决
问题原因与解决方法
报错本质
你给Column的children加了const,意味着这个列表里的所有子组件必须是编译时常量——也就是必须用const关键字构造的组件实例。如果你的Row没有用const构造,或者Row内部的子组件无法被const构造,就会触发这个错误。
正确解决方法
分两种场景处理:
场景1:所有组件都能被const构造
如果你的Row和它内部的子组件(比如Icon、Text这类自带const构造的组件)不需要动态数据,直接给Row加上const即可。Flutter 2.0+支持const上下文,外层加了const后,内层的const可以省略,代码会更简洁:
const Column( children: [ // 其他const组件 Row( children: [ Icon(Icons.email), Text("example@mail.com"), ], ), ], )
如果是低版本Flutter,需要显式给所有嵌套的const组件加const:
const Column( children: const [ const Row( children: const [ const Icon(Icons.email), const Text("example@mail.com"), ], ), ], )
场景2:Row包含动态内容(无法const构造)
如果Row里有动态变量、或者子组件没有const构造函数,那必须移除Column的children前面的const,但可以给其他能const的子组件单独加const来消除警告:
Column( children: [ const Text("个人资料"), // 这个组件无动态数据,单独加const Row( children: [ Icon(Icons.email), Text(userEmail), // userEmail是动态变量,无法const ], ), ], )
为什么你之前的尝试部分无效?
- 只给Row的children加const:但Row本身没加const,const列表里的元素必须是const实例,所以还是报错。
- 移除外层const:虽然能运行,但因为其他可以const的组件没加const,所以会出现警告,这时候给那些静态组件单独加const就能解决。
内容的提问来源于stack exchange,提问作者abhi
相关产品推荐
相关产品推荐

