Skip to content

Commit

Permalink
fix M2 InputDecorator suffix icon doesn't turn red on error (#149161)
Browse files Browse the repository at this point in the history
The suffixIcon of a TextField with an error now turns red like it should (on Material 2).
  • Loading branch information
bleroux authored May 28, 2024
1 parent e2e68c0 commit fdca33c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
7 changes: 5 additions & 2 deletions packages/flutter/lib/src/material/input_decorator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4570,7 +4570,7 @@ class _InputDecoratorDefaultsM2 extends InputDecorationTheme {

@override
TextStyle? get helperStyle => MaterialStateTextStyle.resolveWith((Set<MaterialState> 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);
}
Expand All @@ -4580,7 +4580,7 @@ class _InputDecoratorDefaultsM2 extends InputDecorationTheme {

@override
TextStyle? get errorStyle => MaterialStateTextStyle.resolveWith((Set<MaterialState> 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);
}
Expand Down Expand Up @@ -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;
}
Expand Down
23 changes: 23 additions & 0 deletions packages/flutter/test/material/input_decorator_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit fdca33c

Please sign in to comment.