You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter自定义主题中displayMedium文本颜色不生效,如何解决?

Flutter中CustomTheme修改displayMedium颜色不生效的解决方法

问题根源:你在定义lightTheme时,textTheme字段里直接引用了lightTheme.textTheme——此时lightTheme还未完成初始化,这里拿到的是ThemeData的默认文本主题,而非你正在构建的自定义主题,导致displayMedium的颜色修改无法正确应用到最终主题上。

修复后的CustomTheme代码

class CustomTheme {
  static ThemeData lightTheme = ThemeData(
    primaryColor: Colors.red,
    colorScheme: ColorScheme.fromSwatch().copyWith(
      primary: Colors.red,
      secondary: Colors.green,
    ),
    useMaterial3: true,
    // 基于GoogleFonts提供的Merriweather文本主题修改,避免循环引用
    textTheme: GoogleFonts.merriweatherTextTheme().copyWith(
      displayMedium: GoogleFonts.merriweather(
        color: Colors.blue,
      ).copyWith(color: Colors.blue),
    ),
  );
}

另一种写法(保留默认TextTheme样式)

如果你想保留ThemeData默认light主题的文本样式结构,仅修改颜色和字体,可以这样写:

class CustomTheme {
  static ThemeData lightTheme = ThemeData(
    primaryColor: Colors.red,
    colorScheme: ColorScheme.fromSwatch().copyWith(
      primary: Colors.red,
      secondary: Colors.green,
    ),
    useMaterial3: true,
    fontFamily: GoogleFonts.merriweather().fontFamily,
    // 基于默认light主题的textTheme修改
    textTheme: ThemeData.light().textTheme.copyWith(
      displayMedium: ThemeData.light().textTheme.displayMedium!.copyWith(
        color: Colors.blue,
        fontFamily: GoogleFonts.merriweather().fontFamily,
      ),
    ),
  );
}

补充说明

Material3中部分文本样式的颜色会被ColorScheme的属性(如onSurface)覆盖,如果修复循环引用后颜色仍不生效,可以检查ColorScheme的相关配置,或者在Text组件中临时指定颜色验证:

Text("Hello", style: Theme.of(context).textTheme.displayMedium?.copyWith(color: Colors.blue))

内容的提问来源于stack exchange,提问作者Acheese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:10:09