diff --git a/dev/tools/gen_defaults/generated/used_tokens.csv b/dev/tools/gen_defaults/generated/used_tokens.csv index 87120d20dc..254ae16793 100644 --- a/dev/tools/gen_defaults/generated/used_tokens.csv +++ b/dev/tools/gen_defaults/generated/used_tokens.csv @@ -252,6 +252,7 @@ md.comp.filled-text-field.error.focus.trailing-icon.color, md.comp.filled-text-field.error.hover.active-indicator.color, md.comp.filled-text-field.error.hover.label-text.color, md.comp.filled-text-field.error.hover.supporting-text.color, +md.comp.filled-text-field.error.hover.trailing-icon.color, md.comp.filled-text-field.error.label-text.color, md.comp.filled-text-field.error.leading-icon.color, md.comp.filled-text-field.error.supporting-text.color, diff --git a/dev/tools/gen_defaults/lib/input_decorator_template.dart b/dev/tools/gen_defaults/lib/input_decorator_template.dart index 3fb208b8fb..80d67a0b8d 100644 --- a/dev/tools/gen_defaults/lib/input_decorator_template.dart +++ b/dev/tools/gen_defaults/lib/input_decorator_template.dart @@ -124,10 +124,10 @@ class _${blockName}DefaultsM3 extends InputDecorationTheme { if (states.contains(MaterialState.disabled)) { return ${componentColor('md.comp.filled-text-field.disabled.trailing-icon')}; } - if (states.contains(MaterialState.error)) {${componentColor('md.comp.filled-text-field.error.trailing-icon') == componentColor('md.comp.filled-text-field.error.focus.trailing-icon') ? '' : ''' + if (states.contains(MaterialState.error)) { if (states.contains(MaterialState.hovered)) { return ${componentColor('md.comp.filled-text-field.error.hover.trailing-icon')}; - } + }${componentColor('md.comp.filled-text-field.error.trailing-icon') == componentColor('md.comp.filled-text-field.error.focus.trailing-icon') ? '' : ''' if (states.contains(MaterialState.focused)) { return ${componentColor('md.comp.filled-text-field.error.focus.trailing-icon')}; }'''} diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart index c673072358..ad56f3e3ad 100644 --- a/packages/flutter/lib/src/material/input_decorator.dart +++ b/packages/flutter/lib/src/material/input_decorator.dart @@ -4748,6 +4748,9 @@ class _InputDecoratorDefaultsM3 extends InputDecorationTheme { return _colors.onSurface.withOpacity(0.38); } if (states.contains(MaterialState.error)) { + if (states.contains(MaterialState.hovered)) { + return _colors.onErrorContainer; + } return _colors.error; } return _colors.onSurfaceVariant; diff --git a/packages/flutter/test/material/input_decorator_test.dart b/packages/flutter/test/material/input_decorator_test.dart index c3fbe94d87..91ca2f0435 100644 --- a/packages/flutter/test/material/input_decorator_test.dart +++ b/packages/flutter/test/material/input_decorator_test.dart @@ -5786,9 +5786,7 @@ void main() { ); final ThemeData theme = Theme.of(tester.element(findSuffixIcon())); - // TODO(bleroux): based on M3 spec, it should be theme.colorScheme.onErrorContainer. - // See https://github.com/flutter/flutter/issues/149410. - final Color expectedColor = theme.colorScheme.error; + final Color expectedColor = theme.colorScheme.onErrorContainer; expect(getSuffixIconStyle(tester).color, expectedColor); }); }); @@ -6262,9 +6260,7 @@ void main() { ); final ThemeData theme = Theme.of(tester.element(findSuffixIcon())); - // TODO(bleroux): based on M3 spec, it should be theme.colorScheme.onErrorContainer. - // See https://github.com/flutter/flutter/issues/149410. - final Color expectedColor = theme.colorScheme.error; + final Color expectedColor = theme.colorScheme.onErrorContainer; expect(getSuffixIconStyle(tester).color, expectedColor); }); });