Skip to content

Commit

Permalink
Update Text field counter error style to material 3 (flutter#108704)
Browse files Browse the repository at this point in the history
* M3 counter error style

* polish

* Update text_field_template.dart

* Roll Flutter Engine from 3cba105 to cf0db3e (1 revision) (flutter#108716)

* resolve comments

* Roll Plugins from 257eacb1e2aa to a6d42f1e01d3 (3 revisions) (flutter#108738)

* Override PlaceholderDimensions equality operator to avoid unnecessary TextPainter re-layouts (flutter#108623)

* Roll Flutter Engine from cf0db3e to aa90044 (1 revision) (flutter#108734)

* Roll Flutter Engine from aa90044 to 6d2fd23 (5 revisions) (flutter#108744)

* Fix lerp to eccentric circle. (flutter#108743)

* Roll Flutter Engine from 6d2fd23 to f182794 (4 revisions) (flutter#108749)

* Roll Flutter Engine from f182794 to 25e8021 (1 revision) (flutter#108751)

* Sync with flutter/.github#13 (flutter#108754)

* Roll Flutter Engine from 25e8021 to e771729 (2 revisions) (flutter#108755)

* clean-up analysis_options.yaml (flutter#108747)

* Fix ExpansionTile shows children background when expanded (flutter#107834)

* Create `containsSemantics` to allow for partial matching of semantics in tests. (flutter#108573)

* Roll Flutter Engine from e771729 to 7d0f6d2 (2 revisions) (flutter#108757)

* Enable conditional_uri_does_not_exist (flutter#108652)

* Roll Flutter Engine from 7d0f6d2 to b257966 (3 revisions) (flutter#108763)

* Roll Flutter Engine from b257966 to 60e5eb6 (3 revisions) (flutter#108766)

* Reland `Linux_samsung_a02 openpay_benchmarks__scroll_perf` (flutter#108466) (flutter#108769)

* [SelectionOverlay]Move the debug statement to the scope of the assertion. (flutter#108508)

* Roll Flutter Engine from 60e5eb6 to 1c3b1b3 (11 revisions) (flutter#108780)

* Roll Flutter Engine from 1c3b1b3 to b607811 (1 revision) (flutter#108782)

* Roll Flutter Engine from b607811 to 3b2bd24 (1 revision) (flutter#108784)

* Roll Flutter Engine from 3b2bd24 to 0e5392c (1 revision) (flutter#108788)

* Roll Flutter Engine from 0e5392c to 4b19256 (1 revision) (flutter#108793)

* Roll Flutter Engine from 4b19256 to e0b5edc (2 revisions) (flutter#108798)

* Roll Flutter Engine from e0b5edc to b164c5c (1 revision) (flutter#108814)

* Update text_field.dart

* Roll Flutter Engine from b164c5c to eb2b57b (4 revisions) (flutter#108821)

* Roll Plugins from a6d42f1e01d3 to 0d6d03a94ed5 (1 revision) (flutter#108822)

* Roll Flutter Engine from eb2b57b to 978d8e2 (2 revisions) (flutter#108825)

* Loupe Android + iOS (flutter#107477)

* added Magnifier for iOS and Android

* Mark `Mac_ios microbenchmarks_ios_flaky` flaky (flutter#108820)

* Deprecate `toggleableActiveColor` (flutter#97972)

* Roll Flutter Engine from 978d8e2 to 2b31732 (4 revisions) (flutter#108830)

* [flutter_tools] Test that DAP process terminates at the end of a session (flutter#108301)

* Roll Flutter Engine from 2b31732 to 4e9c869 (1 revision) (flutter#108833)

* fix noop toString() diagnostics (flutter#108836)

* [flutter_tools] Migrate more tool tests to null-safety (flutter#108639)

* Revert "Fix ExpansionTile shows children background when expanded" (flutter#108844)

* Roll Flutter Engine from 4e9c869 to 6724561 (2 revisions) (flutter#108838)

* Marks Linux_android clipper_cache_perf__e2e_summary to be unflaky (flutter#104088)

* Update documentation to match implementation (flutter#108843)

* Reland "Add shadowColor and surfaceTintColor to Dialog and DialogTheme." flutter#108718

* Roll Flutter Engine from 6724561 to f3deaba (8 revisions) (flutter#108847)

* Roll Flutter Engine from f3deaba to c07e1ac (2 revisions) (flutter#108849)

* Roll Flutter Engine from c07e1ac to a1e77ae (5 revisions) (flutter#108850)

* Roll Flutter Engine from a1e77ae to c456476 (2 revisions) (flutter#108853)

* Roll Flutter Engine from c456476 to 6cd744b (1 revision) (flutter#108857)

* Roll Flutter Engine from 6cd744b to 51296a6 (1 revision) (flutter#108860)

* Roll Flutter Engine from 51296a6 to 05228ad (1 revision) (flutter#108862)

* Revert "Roll Flutter Engine from 51296a6 to 05228ad (1 revision) (flutter#108862)" (flutter#108882)

This reverts commit a880c4e.

* Roll Plugins from 0d6d03a94ed5 to e74c42028d39 (5 revisions) (flutter#108887)

* Roll Flutter Engine from 51296a6 to 2c28298 (6 revisions) (flutter#108899)

* [flutter_test] Add flag to send device pointer events to the framework (flutter#108430)

* Roll Flutter Engine from 2c28298 to adba702 (2 revisions) (flutter#108903)

* fix flutter not finding custom device (flutter#108884)

* Force a11y services to off for complex_layout_semantics_perf test (flutter#108906)

* Update `equalsIgnoringHashCodes` to take a list of Strings (flutter#108507)

* [macOS] Use editing intents from engine (flutter#105407)

* Added `IconButtonTheme` and apply it to `IconButton` in M3 (flutter#108332)

* Created IconButtonTheme and apply it to IconButton

* [web] Add onEntrypointLoaded to FlutterLoader. (flutter#108776)

* Roll pub packages (flutter#108919)

* [flutter_test] perf: find.ancestor (flutter#108868)

* Roll Flutter Engine from adba702 to 1188a80 (4 revisions) (flutter#108922)

* Bump github/codeql-action from 2.1.17 to 2.1.18 (flutter#108923)

* Remove some outdated ignores from framework (flutter#108915)

* Roll Flutter Engine from 1188a80 to 1743d1d (1 revision) (flutter#108925)

* Clean up ScrollbarPainter (flutter#107179)

* Remove outdated ignores (flutter#108924)

* Add more logs to diagnose Gold flake (flutter#108930)

* M3 counter error style

* polish

* Update text_field_template.dart

* resolve comments

* Update text_field.dart

Co-authored-by: engine-flutter-autoroll <engine-flutter-autoroll@skia.org>
Co-authored-by: Tomasz Gucio <72562119+tgucio@users.noreply.github.com>
Co-authored-by: Greg Spencer <gspencergoog@users.noreply.github.com>
Co-authored-by: Ian Hickson <ian@hixie.ch>
Co-authored-by: Michael Goderbauer <goderbauer@google.com>
Co-authored-by: Bruno Leroux <leroux_bruno@yahoo.fr>
Co-authored-by: pdblasi-google <109253501+pdblasi-google@users.noreply.github.com>
Co-authored-by: Kaushik Iska <iska.kaushik@gmail.com>
Co-authored-by: xubaolin <xubaolin@oppo.com>
Co-authored-by: Anthony Oleinik <48811365+antholeole@users.noreply.github.com>
Co-authored-by: keyonghan <54558023+keyonghan@users.noreply.github.com>
Co-authored-by: Taha Tesser <tessertaha@gmail.com>
Co-authored-by: Danny Tuppeny <danny@tuppeny.com>
Co-authored-by: Phil Quitslund <pq@users.noreply.github.com>
Co-authored-by: Christopher Fujino <christopherfujino@gmail.com>
Co-authored-by: Kate Lovett <katelovett@google.com>
Co-authored-by: Flutter GitHub Bot <fluttergithubbot@gmail.com>
Co-authored-by: parkershepherd <me@parkershepherd.com>
Co-authored-by: Darren Austin <darrenaustin@google.com>
Co-authored-by: Zachary Anderson <zanderso@users.noreply.github.com>
Co-authored-by: Jia Hao <jiahaog@users.noreply.github.com>
Co-authored-by: Hannes Winkler <hanneswinkler2000@web.de>
Co-authored-by: Matej Knopp <matej.knopp@gmail.com>
Co-authored-by: Qun Cheng <36861262+QuncCccccc@users.noreply.github.com>
Co-authored-by: David Iglesias <ditman@gmail.com>
Co-authored-by: Pascal Welsch <pascal@welsch.dev>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
  • Loading branch information
1 parent d81d6e2 commit a88a119
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 2 deletions.
3 changes: 3 additions & 0 deletions dev/tools/gen_defaults/lib/text_field_template.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,8 @@ class TextFieldTemplate extends TokenTemplate {
// Generated version ${tokens["version"]}
TextStyle _m3InputStyle(BuildContext context) => ${textStyle("md.comp.filled-text-field.label-text")}!;
TextStyle _m3CounterErrorStyle(BuildContext context) =>
${textStyle("md.comp.filled-text-field.supporting-text")}!.copyWith(color:${componentColor('md.comp.filled-text-field.error.supporting-text')});
''';
}
8 changes: 7 additions & 1 deletion packages/flutter/lib/src/material/text_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -962,7 +962,7 @@ class _TextFieldState extends State<TextField> with RestorationMixin implements
return effectiveDecoration.copyWith(
errorText: effectiveDecoration.errorText ?? '',
counterStyle: effectiveDecoration.errorStyle
?? themeData.textTheme.caption!.copyWith(color: themeData.errorColor),
?? (themeData.useMaterial3 ? _m3CounterErrorStyle(context): _m2CounterErrorStyle(context)),
counterText: counterText,
semanticCounterText: semanticCounterText,
);
Expand Down Expand Up @@ -1436,6 +1436,9 @@ class _TextFieldState extends State<TextField> with RestorationMixin implements
}
}

TextStyle _m2CounterErrorStyle(BuildContext context) =>
Theme.of(context).textTheme.caption!.copyWith(color: Theme.of(context).errorColor);

// BEGIN GENERATED TOKEN PROPERTIES - TextField

// Do not edit by hand. The code between the "BEGIN GENERATED" and
Expand All @@ -1449,4 +1452,7 @@ class _TextFieldState extends State<TextField> with RestorationMixin implements

TextStyle _m3InputStyle(BuildContext context) => Theme.of(context).textTheme.bodyLarge!;

TextStyle _m3CounterErrorStyle(BuildContext context) =>
Theme.of(context).textTheme.bodySmall!.copyWith(color:Theme.of(context).colorScheme.error);

// END GENERATED TOKEN PROPERTIES - TextField
35 changes: 34 additions & 1 deletion packages/flutter/test/material/text_field_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,9 @@ Widget overlayWithEntry(OverlayEntry entry) {
);
}

Widget boilerplate({ required Widget child }) {
Widget boilerplate({ required Widget child, ThemeData? theme }) {
return MaterialApp(
theme: theme,
home: Localizations(
locale: const Locale('en', 'US'),
delegates: <LocalizationsDelegate<dynamic>>[
Expand Down Expand Up @@ -4655,6 +4656,38 @@ void main() {
expect(counterTextWidget.style!.color, isNot(equals(Colors.deepPurpleAccent)));
});

testWidgets('maxLength shows warning in Material 3', (WidgetTester tester) async {
final TextEditingController textController = TextEditingController();
final ThemeData theme = ThemeData.from(
colorScheme: const ColorScheme.light().copyWith(error: Colors.deepPurpleAccent),
useMaterial3: true,
);
await tester.pumpWidget(boilerplate(
theme: theme,
child: TextField(
controller: textController,
maxLength: 10,
maxLengthEnforcement: MaxLengthEnforcement.none,
),
));

await tester.enterText(find.byType(TextField), '0123456789101112');
await tester.pump();

expect(textController.text, '0123456789101112');
expect(find.text('16/10'), findsOneWidget);
Text counterTextWidget = tester.widget(find.text('16/10'));
expect(counterTextWidget.style!.color, equals(Colors.deepPurpleAccent));

await tester.enterText(find.byType(TextField), '0123456789');
await tester.pump();

expect(textController.text, '0123456789');
expect(find.text('10/10'), findsOneWidget);
counterTextWidget = tester.widget(find.text('10/10'));
expect(counterTextWidget.style!.color, isNot(equals(Colors.deepPurpleAccent)));
});

testWidgets('maxLength shows warning when maxLengthEnforcement.none with surrogate pairs.', (WidgetTester tester) async {
final TextEditingController textController = TextEditingController();
const TextStyle testStyle = TextStyle(color: Colors.deepPurpleAccent);
Expand Down

0 comments on commit a88a119

Please sign in to comment.