Flutter ThemeData初始化报错:'colorSchemeSeed == null || primaryColor == null'不成立
解决Flutter ThemeData断言错误:"colorSchemeSeed == null || primaryColor == null"
错误原因
你同时给ThemeData设置了colorSchemeSeed和primaryColor,这两个参数是互斥的。colorSchemeSeed的作用是自动生成一套完整的ColorScheme(包含primaryColor在内的所有主题色),手动设置primaryColor会和自动生成的颜色冲突,所以Flutter用断言阻止这种矛盾配置。
解决方案
二选一即可:
方案1:保留colorSchemeSeed,移除primaryColor
如果需要自定义primaryColor,直接在colorScheme里指定,覆盖自动生成的值:
// Our light/Primary Theme ThemeData themeData(BuildContext context) { return ThemeData( appBarTheme: appBarTheme, colorSchemeSeed: kAccentLightColor, scaffoldBackgroundColor: Colors.white, colorScheme: ColorScheme.light( primary: kPrimaryColor, // 在这里设置自定义primaryColor secondary: kSecondaryLightColor, // on light theme surface = Colors.white by default ), iconTheme: const IconThemeData(color: kBodyTextColorLight), floatingActionButtonTheme: const FloatingActionButtonThemeData(foregroundColor: kAccentIconLightColor), primaryIconTheme: const IconThemeData(color: kPrimaryIconLightColor), textTheme: GoogleFonts.latoTextTheme().copyWith( bodySmall: const TextStyle(color: kBodyTextColorDark), bodyMedium: const TextStyle(color: kBodyTextColorDark), bodyLarge: const TextStyle(color: kBodyTextColorDark), headlineMedium: const TextStyle(color: kTitleTextDarkColor, fontSize: 32), headlineLarge: const TextStyle(color: kTitleTextDarkColor, fontSize: 80), ), ); }
方案2:保留primaryColor,移除colorSchemeSeed
如果不需要用colorSchemeSeed自动生成颜色,直接删掉这个参数:
// Our light/Primary Theme ThemeData themeData(BuildContext context) { return ThemeData( appBarTheme: appBarTheme, primaryColor: kPrimaryColor, scaffoldBackgroundColor: Colors.white, colorScheme: ColorScheme.light( secondary: kSecondaryLightColor, // on light theme surface = Colors.white by default ), iconTheme: const IconThemeData(color: kBodyTextColorLight), floatingActionButtonTheme: const FloatingActionButtonThemeData(foregroundColor: kAccentIconLightColor), primaryIconTheme: const IconThemeData(color: kPrimaryIconLightColor), textTheme: GoogleFonts.latoTextTheme().copyWith( bodySmall: const TextStyle(color: kBodyTextColorDark), bodyMedium: const TextStyle(color: kBodyTextColorDark), bodyLarge: const TextStyle(color: kBodyTextColorDark), headlineMedium: const TextStyle(color: kTitleTextDarkColor, fontSize: 32), headlineLarge: const TextStyle(color: kTitleTextDarkColor, fontSize: 80), ), ); }
内容的提问来源于stack exchange,提问作者Atik19
相关产品推荐
相关产品推荐

