Skip to content

InputDecorator.prefixIcon color is not compliant when disabled #149411

@bleroux

Description

@bleroux

Steps to reproduce

  1. Copy the given test inside packages/flutter/test/material/input_decorator_test.dart
  2. Run it.

Expected results

The test succeeds as the expected color from M3 spec is onSurface.withOpacity(0.38), see https://m3.material.io/components/text-fields/specs#e4964192-72ad-414f-85b4-4b4357abb83c

image

Actual results

The test failed be cause the actual color is onSurfaceVariant.

Code sample

Code sample
const IconData prefixIcon = Icons.search;

Finder findPrefixIcon() {
  return find.byIcon(prefixIcon);
}

Rect getPrefixIconRect(WidgetTester tester) {
  return tester.getRect(findPrefixIcon());
}

Finder findPrefixIconInnerRichText() {
  return find.descendant(of: findPrefixIcon(), matching: find.byType(RichText));
}

TextStyle getPrefixIconStyle(WidgetTester tester) {
  return tester.widget<RichText>(findPrefixIconInnerRichText()).text.style!;
}

testWidgets('prefixIcon has correct color when disabled', (WidgetTester tester) async {
  await tester.pumpWidget(
    buildInputDecorator(
      decoration: const InputDecoration(
        border: OutlineInputBorder(),
        enabled: false,
        labelText: labelText,
        prefixIcon: Icon(prefixIcon),
      ),
    ),
  );

  final ThemeData theme = Theme.of(tester.element(findPrefixIcon()));
  final Color expectedColor = theme.colorScheme.onSurface.withOpacity(0.38);
  expect(getPrefixIconStyle(tester).color, expectedColor);
});

Screenshots or Video

No response

Logs

Logs
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following TestFailure was thrown running a test:
Expected: Color:<Color(0x611d1b20)>
  Actual: Color:<Color(0xff49454f)>

When the exception was thrown, this was the stack:
#4      main.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///home/bruno/Nevercode/flutter/packages/flutter/test/material/input_decorator_test.dart:5928:3)
<asynchronous suspension>
#5      testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:183:15)
<asynchronous suspension>
#6      TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:1025:5)
<asynchronous suspension>
<asynchronous suspension>
(elided one frame from package:stack_trace)

This was caught by the test expectation on the following line:
  file:///home/bruno/Nevercode/flutter/packages/flutter/test/material/input_decorator_test.dart line 5928
The test description was:
  prefixIcon has correct color when disabled
════════════════════════════════════════════════════════════════════════════════════════════════════

Flutter Doctor output

Doctor output
Doctor summary (to see all details, run flutter doctor -v):
[!] Flutter (Channel [user-branch], 3.22.0-18.0.pre.572, on Ubuntu 24.04 LTS

Metadata

Metadata

Assignees

Labels

P2Important issues not at the top of the work lista: text inputEntering text in a text field or keyboard related problemsf: material designflutter/packages/flutter/material repository.found in release: 3.22Found to occur in 3.22found in release: 3.23Found to occur in 3.23frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onr: fixedIssue is closed as already fixed in a newer versionteam-text-inputOwned by Text Input team

Type

No type

Projects

Status

Done (PR merged)

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions