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

如何在不修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:50:07