From f0a4eab7d7d32eeb432b40ee6b1bb86d6b92636a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20M=C3=BCrtz?= Date: Sat, 18 Apr 2020 01:58:05 +0200 Subject: [PATCH] Make TextFormFieldState.didChange change text fields value (#54481) --- .../lib/src/material/text_form_field.dart | 8 ++++ .../test/material/text_form_field_test.dart | 46 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/packages/flutter/lib/src/material/text_form_field.dart b/packages/flutter/lib/src/material/text_form_field.dart index 51b3199d5f..ee5fa95827 100644 --- a/packages/flutter/lib/src/material/text_form_field.dart +++ b/packages/flutter/lib/src/material/text_form_field.dart @@ -309,6 +309,14 @@ class _TextFormFieldState extends FormFieldState { super.dispose(); } + @override + void didChange(String value) { + super.didChange(value); + + if (_effectiveController.text != value) + _effectiveController.text = value; + } + @override void reset() { super.reset(); diff --git a/packages/flutter/test/material/text_form_field_test.dart b/packages/flutter/test/material/text_form_field_test.dart index 26254cee22..779ea79058 100644 --- a/packages/flutter/test/material/text_form_field_test.dart +++ b/packages/flutter/test/material/text_form_field_test.dart @@ -331,4 +331,50 @@ void main() { await tester.pump(const Duration(milliseconds: 300)); expect(tapCount, 3); }); + + // Regression test for https://github.com/flutter/flutter/issues/54472. + testWidgets('reset resets the text fields value to the initialValue', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: Center( + child: TextFormField( + initialValue: 'initialValue', + ), + ), + ), + ) + ); + + await tester.enterText(find.byType(TextFormField), 'changedValue'); + + final FormFieldState state = tester.state>(find.byType(TextFormField)); + state.reset(); + + expect(find.text('changedValue'), findsNothing); + expect(find.text('initialValue'), findsOneWidget); + }); + + // Regression test for https://github.com/flutter/flutter/issues/54472. + testWidgets('didChange changes text fields value', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: Center( + child: TextFormField( + initialValue: 'initialValue', + ), + ), + ), + ) + ); + + expect(find.text('initialValue'), findsOneWidget); + + final FormFieldState state = tester.state>(find.byType(TextFormField)); + state.didChange('changedValue'); + + expect(find.text('initialValue'), findsNothing); + expect(find.text('changedValue'), findsOneWidget); + }); }