diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart index f69ef7a9aa3b7..1e2642533eeaa 100644 --- a/packages/flutter/lib/src/material/input_decorator.dart +++ b/packages/flutter/lib/src/material/input_decorator.dart @@ -4570,7 +4570,7 @@ class _InputDecoratorDefaultsM2 extends InputDecorationTheme { @override TextStyle? get helperStyle => MaterialStateTextStyle.resolveWith((Set states) { - final ThemeData themeData= Theme.of(context); + final ThemeData themeData = Theme.of(context); if (states.contains(MaterialState.disabled)) { return themeData.textTheme.bodySmall!.copyWith(color: Colors.transparent); } @@ -4580,7 +4580,7 @@ class _InputDecoratorDefaultsM2 extends InputDecorationTheme { @override TextStyle? get errorStyle => MaterialStateTextStyle.resolveWith((Set states) { - final ThemeData themeData= Theme.of(context); + final ThemeData themeData = Theme.of(context); if (states.contains(MaterialState.disabled)) { return themeData.textTheme.bodySmall!.copyWith(color: Colors.transparent); } @@ -4630,6 +4630,9 @@ class _InputDecoratorDefaultsM2 extends InputDecorationTheme { if (states.contains(MaterialState.disabled) && !states.contains(MaterialState.focused)) { return Theme.of(context).disabledColor; } + if (states.contains(MaterialState.error)) { + return Theme.of(context).colorScheme.error; + } if (states.contains(MaterialState.focused)) { return Theme.of(context).colorScheme.primary; } diff --git a/packages/flutter/test/material/input_decorator_test.dart b/packages/flutter/test/material/input_decorator_test.dart index 8e409752533f4..9c605408d92eb 100644 --- a/packages/flutter/test/material/input_decorator_test.dart +++ b/packages/flutter/test/material/input_decorator_test.dart @@ -8885,6 +8885,29 @@ void main() { expect(tester.getTopRight(find.text('text')).dx, lessThanOrEqualTo(tester.getTopLeft(find.byIcon(Icons.satellite)).dx)); }); + testWidgets('Material2 - InputDecorator suffixIcon color in error state', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + theme: ThemeData(useMaterial3: false), + home: Material( + child: TextField( + decoration: InputDecoration( + suffixIcon: IconButton( + icon: const Icon(Icons.close), + onPressed: () {}, + ), + errorText: 'Error state', + filled: true, + ), + ), + ), + ), + ); + + final ThemeData theme = Theme.of(tester.element(find.byType(TextField))); + expect(getIconStyle(tester, Icons.close)?.color, theme.colorScheme.error); + }); + testWidgets('InputDecorator prefixIconConstraints/suffixIconConstraints', (WidgetTester tester) async { await tester.pumpWidget( buildInputDecoratorM2(