Flutter中为何AppBar Widget无法使用const修饰?
问题解答
你这段代码报错的核心原因是:AppBar的默认构造函数并不是const构造函数,但你把它放在了const Scaffold的上下文里(const修饰的组件要求所有子组件也必须是const可构造的)。
至于为什么AppBar没做成const构造函数,主要有这几点:
- const构造函数的硬性要求是:类的所有成员变量必须是final,且只能在构造时初始化,不能包含任何运行时逻辑。但
AppBar有大量属性是无法在编译期确定值的,比如onPressed这类回调函数、动态生成的actions组件列表,还有依赖上下文状态的leading等,这些都不符合const构造的限制。 - 另外,
AppBar的内部实现涉及很多运行时的布局计算、状态管理逻辑,这些动态行为是const构造函数无法支持的——const组件是编译期就固定的,不能有运行时的变化。
修复代码很简单,去掉Scaffold的const修饰即可,要是想优化性能,可以把内部的Text改成const:
Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("Verify Email")), body: const Text("Needa verify that email dawg @_@"), ); }
内容的提问来源于stack exchange,提问作者Joeyboy
相关产品推荐
相关产品推荐

