Flutter引入english_words包后使用wordPair.asPascalCase报非常量错误怎么办
Flutter english_words包使用报"Not a constant expression"错误解决方案
错误根因
报错触发的原因是包含动态运行时值的Text组件被放在了const修饰的父Widget内部:
- Dart语法中,被
const标记的Widget要求其所有子属性都必须是编译期就能确定的常量 wordPair是通过english_words包运行时动态生成的实例,wordPair.asPascalCase属于运行时才会计算的值,不满足常量要求,因此触发编译错误
该报错与
english_words依赖的导入无关,无需调整pubspec.yaml中的依赖配置。
修复方案
方案一:移除父组件的const修饰
找到Text(wordPair.asPascalCase)所在的父组件,删除父组件前的const关键字即可,示例:
// 错误写法 const Center( child: Text(wordPair.asPascalCase), ) // 修正后写法 Center( child: Text(wordPair.asPascalCase), )
方案二:仅对常量属性保留const修饰
如果需要保留const的性能优化,可以仅给Text组件下固定不变的参数加const,不要给整个Text或者包含动态值的父组件加const:
Center( child: Text( wordPair.asPascalCase, // 固定不变的样式参数可以保留const style: const TextStyle(color: Colors.black, fontSize: 18), ), )
修改完成后重新运行应用即可解决报错。
内容的提问来源于stack exchange,提问作者Daniel Kim
相关产品推荐
相关产品推荐

