Flutter中为何无法为const修饰的组件使用UniqueKey?该如何解决?
报错原因
报错是const修饰符的语法约束导致的:被const标记的组件,其内部所有子组件、属性值都必须是编译期可确定的常量。
ValueKey('note')的入参是字符串常量,且ValueKey本身提供const构造函数,符合const上下文的常量要求,因此可以正常运行UniqueKey()的构造函数不是const类型,它的设计目的就是每次运行时生成一个全局唯一的新key,属于运行时才会确定的值,无法满足const上下文的要求,因此触发编译错误
解决方案
要正常使用UniqueKey,直接去掉Center组件前的const修饰符即可,修改后的代码如下:
body: Center ( child: Note(key: UniqueKey(), initialValue: 'test'), // 运行正常 ),
如果需要保留其他子组件的const优化,可以单独给不需要动态key的子组件加const修饰,不需要给整层Center加const。如果你坚持要保留外层const Center的常量优化,则不能使用运行时生成的UniqueKey,只能改用ValueKey、ObjectKey这类支持传入常量参数的key类型。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

