如何在不修改Material Theme Builder生成的ColorScheme下覆盖输入框错误悬停边框色?
解决Material3输入框错误状态悬停颜色覆盖问题
你可以通过在InputDecorationTheme中使用MaterialStateProperty.resolveWith来针对错误+悬停的状态组合自定义边框颜色,完全不需要修改Material Theme Builder生成的ColorScheme。
具体修改你的代码如下:
ThemeData theme(ColorScheme colorScheme) => ThemeData( useMaterial3: true, brightness: colorScheme.brightness, colorScheme: colorScheme, textTheme: textTheme.apply( bodyColor: colorScheme.onSurface, displayColor: colorScheme.onSurface, ), inputDecorationTheme: InputDecorationTheme( // 用MaterialStateProperty处理多状态组合的边框样式 border: MaterialStateProperty.resolveWith((states) { // 匹配错误+悬停状态,自定义边框颜色 if (states.contains(MaterialState.error) && states.contains(MaterialState.hovered)) { return OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: const BorderSide(color: Colors.deepOrange), // 替换成你想要的颜色 ); } // 错误状态(非悬停)的边框 else if (states.contains(MaterialState.error)) { return OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: colorScheme.error), ); } // 其他默认状态的边框 return OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: colorScheme.outline), ); }), fillColor: Colors.purple.withOpacity(0.1), filled: true, ), scaffoldBackgroundColor: colorScheme.surface, canvasColor: colorScheme.surface, );
原理是通过MaterialStateProperty.resolveWith可以识别输入框的所有状态组合(比如错误、悬停、聚焦等),你只需要针对「错误+悬停」这个特定组合返回自定义的边框样式,其他状态保持原有逻辑即可,完全不会改动生成的ColorScheme。
内容的提问来源于stack exchange,提问作者zer09
相关产品推荐
相关产品推荐

