Flutter明暗主题共存报错:Failed to interpolate TextStyles with different inherit values
解决Flutter明暗主题切换时的"Failed to interpolate TextStyles with different inherit values"错误
错误原因
你的明暗主题中textTheme的初始化方式不一致,导致生成的TextStyle的inherit属性值不匹配:
- 浅色主题:
GoogleFonts.latoTextTheme(Theme.of(context).textTheme)基于当前上下文的基础textTheme生成Lato字体样式,继承了原样式的inherit属性 - 深色主题:
GoogleFonts.latoTextTheme()使用默认基础样式生成,未继承ThemeData.dark()的textTheme属性,导致两种主题的TextStyleinherit值存在差异。当应用从后台切回前台触发主题插值时,Flutter无法处理不同inherit值的TextStyle插值,从而抛出错误。
修复方案
统一两个主题的textTheme创建方式,让深色主题同样基于对应基础主题的textTheme生成Lato字体样式:
修改后的darkTheme代码:
static ThemeData darkTheme(BuildContext context) { return ThemeData.dark().copyWith( colorScheme: ColorScheme.fromSeed( seedColor: AppColors.primaryColorOpacity50, brightness: Brightness.dark), // 与浅色主题保持一致的创建方式,传入基础textTheme textTheme: GoogleFonts.latoTextTheme(Theme.of(context).textTheme), scaffoldBackgroundColor: AppColors.backgroundColorDark, timePickerTheme: TimePickerThemeData( backgroundColor: AppColors.labelGrayColor, dayPeriodColor: AppColors.primaryColorOpacity50, helpTextStyle: const TextStyle(color: Colors.black), confirmButtonStyle: TextButton.styleFrom(foregroundColor: Colors.black), cancelButtonStyle: TextButton.styleFrom( foregroundColor: Colors.black, ), ) ); }
如果不想依赖上下文的主题,也可以直接基于ThemeData.dark()的textTheme创建:
textTheme: GoogleFonts.latoTextTheme(ThemeData.dark().textTheme),
额外建议
检查深色主题中timePickerTheme的文本颜色,比如helpTextStyle和按钮文本用Colors.black在深色背景下可能可读性差,建议改为浅色(如Colors.white)以适配深色模式。
内容的提问来源于stack exchange,提问作者Dhruv Sisodia
相关产品推荐
相关产品推荐

