Flutter访问Theme主题信息时报Invalid constant value错误如何解决
问题原因
报错的核心原因是你将Theme.of(context).primaryColor作为了const修饰的Widget的构造参数。Dart语法要求所有被const声明的常量、常量构造的入参都必须是编译期即可确定的固定值,而Theme.of(context)是运行时通过上下文动态获取当前主题配置的方法,返回值无法在编译阶段计算得出,因此触发了非法常量值的报错。
解决方案
- 方案1:移除对应Widget的
const修饰符。例如原有代码为const Text("示例", style: TextStyle(color: Theme.of(context).primaryColor)),直接删除开头的const即可正常运行:Text("示例", style: TextStyle(color: Theme.of(context).primaryColor)) - 方案2:若需要保留
const优化性能,可将主题色定义为全局编译时常量,两处统一调用该常量即可:
首先定义全局常量:
然后修改主题配置代码:const kPrimaryColor = Color(0xFF051F40); const kAccentColor = Color(0xFFF25836);
用到主题色的位置直接替换为常量:theme: ThemeData( fontFamily: 'Lato', ).copyWith( primaryColor: kPrimaryColor, accentColor: kAccentColor, brightness: Brightness.dark, ),color: kPrimaryColor - 方案3:如果需要适配动态主题切换,也可将需要动态取色的部分拆分为独立的非const Widget,外层保留const优化,仅在需要动态取值的子Widget处去掉const修饰即可。
内容的提问来源于stack exchange,提问作者user3697484
相关产品推荐
相关产品推荐

