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(