From 4dd9136397773101f639e9d4a9c8faf168d2c6b3 Mon Sep 17 00:00:00 2001 From: Darren Austin Date: Fri, 27 Mar 2020 15:06:01 -0700 Subject: [PATCH] Reset autovalidate in the text input form field of the Date Picker when switching back to input mode from calendar mode. (#53434) --- .../material/pickers/date_picker_dialog.dart | 1 + .../test/material/date_picker_test.dart | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/packages/flutter/lib/src/material/pickers/date_picker_dialog.dart b/packages/flutter/lib/src/material/pickers/date_picker_dialog.dart index ded9a05ee1..dbafa1d0b6 100644 --- a/packages/flutter/lib/src/material/pickers/date_picker_dialog.dart +++ b/packages/flutter/lib/src/material/pickers/date_picker_dialog.dart @@ -296,6 +296,7 @@ class _DatePickerDialogState extends State<_DatePickerDialog> { setState(() { switch (_entryMode) { case DatePickerEntryMode.calendar: + _autoValidate = false; _entryMode = DatePickerEntryMode.input; break; case DatePickerEntryMode.input: diff --git a/packages/flutter/test/material/date_picker_test.dart b/packages/flutter/test/material/date_picker_test.dart index 5bb8c1f9a8..0019031c59 100644 --- a/packages/flutter/test/material/date_picker_test.dart +++ b/packages/flutter/test/material/date_picker_test.dart @@ -136,6 +136,30 @@ void main() { }); }); + testWidgets('Switching to input mode resets input error state', (WidgetTester tester) async { + await prepareDatePicker(tester, (Future date) async { + // Enter text input mode and type an invalid date to get error. + await tester.tap(find.byIcon(Icons.edit)); + await tester.pumpAndSettle(); + await tester.enterText(find.byType(TextField), '1234567'); + await tester.tap(find.text('OK')); + await tester.pumpAndSettle(); + expect(find.text('Invalid format.'), findsOneWidget); + + // Toggle to calender mode and then back to input mode + await tester.tap(find.byIcon(Icons.calendar_today)); + await tester.pumpAndSettle(); + await tester.tap(find.byIcon(Icons.edit)); + await tester.pumpAndSettle(); + expect(find.text('Invalid format.'), findsNothing); + + // Edit the text, the error should not be showing until ok is tapped + await tester.enterText(find.byType(TextField), '1234567'); + await tester.pumpAndSettle(); + expect(find.text('Invalid format.'), findsNothing); + }); + }); + testWidgets('builder parameter', (WidgetTester tester) async { Widget buildFrame(TextDirection textDirection) { return MaterialApp(