Skip to content

Commit 10f6284

Browse files
Add back the autovalidate class property (#66267)
* Add back autovalidate property * Add autovalidate property back (include tests) * Fix typos * One more test :)
1 parent d95bff1 commit 10f6284

File tree

2 files changed

+111
-12
lines changed

2 files changed

+111
-12
lines changed

packages/flutter/lib/src/widgets/form.dart

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@ class Form extends StatefulWidget {
7777
Key? key,
7878
required this.child,
7979
@Deprecated(
80-
'Use autoValidateMode parameter which provide more specific '
81-
'behaviour related to auto validation. '
80+
'Use autoValidateMode parameter which provides more specific '
81+
'behavior related to auto validation. '
8282
'This feature was deprecated after v1.19.0.'
8383
)
84-
bool autovalidate = false,
84+
this.autovalidate = false,
8585
this.onWillPop,
8686
this.onChanged,
8787
AutovalidateMode? autovalidateMode,
@@ -92,9 +92,8 @@ class Form extends StatefulWidget {
9292
autovalidate == true && autovalidateMode == null,
9393
'autovalidate and autovalidateMode should not be used together.'
9494
),
95-
autovalidateMode = autovalidate
96-
? AutovalidateMode.always
97-
: (autovalidateMode ?? AutovalidateMode.disabled),
95+
autovalidateMode = autovalidateMode ??
96+
(autovalidate ? AutovalidateMode.always : AutovalidateMode.disabled),
9897
super(key: key);
9998

10099
/// Returns the closest [FormState] which encloses the given context.
@@ -141,6 +140,15 @@ class Form extends StatefulWidget {
141140
/// {@macro flutter.widgets.form.autovalidateMode}
142141
final AutovalidateMode autovalidateMode;
143142

143+
/// Used to enable/disable form fields auto validation and update their error
144+
/// text.
145+
@Deprecated(
146+
'Use autoValidateMode parameter which provides more specific '
147+
'behavior related to auto validation. '
148+
'This feature was deprecated after v1.19.0.'
149+
)
150+
final bool autovalidate;
151+
144152
@override
145153
FormState createState() => FormState();
146154
}
@@ -318,11 +326,11 @@ class FormField<T> extends StatefulWidget {
318326
this.validator,
319327
this.initialValue,
320328
@Deprecated(
321-
'Use autoValidateMode parameter which provide more specific '
322-
'behaviour related to auto validation. '
329+
'Use autoValidateMode parameter which provides more specific '
330+
'behavior related to auto validation. '
323331
'This feature was deprecated after v1.19.0.'
324332
)
325-
bool autovalidate = false,
333+
this.autovalidate = false,
326334
this.enabled = true,
327335
AutovalidateMode? autovalidateMode,
328336
}) : assert(builder != null),
@@ -331,9 +339,8 @@ class FormField<T> extends StatefulWidget {
331339
autovalidate == true && autovalidateMode == null,
332340
'autovalidate and autovalidateMode should not be used together.'
333341
),
334-
autovalidateMode = autovalidate
335-
? AutovalidateMode.always
336-
: (autovalidateMode ?? AutovalidateMode.disabled),
342+
autovalidateMode = autovalidateMode ??
343+
(autovalidate ? AutovalidateMode.always : AutovalidateMode.disabled),
337344
super(key: key);
338345

339346
/// An optional method to call with the final value when the form is saved via
@@ -385,6 +392,15 @@ class FormField<T> extends StatefulWidget {
385392
/// {@endtemplate}
386393
final AutovalidateMode autovalidateMode;
387394

395+
/// Used to enable/disable auto validation and update their error
396+
/// text.
397+
@Deprecated(
398+
'Use autoValidateMode parameter which provides more specific '
399+
'behavior related to auto validation. '
400+
'This feature was deprecated after v1.19.0.'
401+
)
402+
final bool autovalidate;
403+
388404
@override
389405
FormFieldState<T> createState() => FormFieldState<T>();
390406
}

packages/flutter/test/widgets/form_test.dart

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,4 +886,87 @@ void main() {
886886
expect(fieldValue, '123456');
887887
expect(formKey.currentState.validate(), isFalse);
888888
});
889+
890+
testWidgets('FormField.autovalidate parameter is passed into class the property', (WidgetTester tester) async {
891+
String errorText(String value) => '$value/error';
892+
const ObjectKey widgetKey = ObjectKey('key');
893+
894+
Widget builder({@required bool autovalidate}) {
895+
return MaterialApp(
896+
home: MediaQuery(
897+
data: const MediaQueryData(devicePixelRatio: 1.0),
898+
child: Directionality(
899+
textDirection: TextDirection.ltr,
900+
child: Center(
901+
child: Material(
902+
child: FormField<String>(
903+
key: widgetKey,
904+
initialValue: 'foo',
905+
autovalidate: autovalidate,
906+
builder: (FormFieldState<String> state) {
907+
return Container();
908+
},
909+
validator: errorText,
910+
),
911+
),
912+
),
913+
),
914+
),
915+
);
916+
}
917+
918+
// When autovalidate is true
919+
await tester.pumpWidget(builder(autovalidate: true));
920+
921+
final Finder formFieldFinder = find.byKey(widgetKey);
922+
FormField<String> formField = tester.widget(formFieldFinder);
923+
expect(formField.autovalidate, isTrue);
924+
expect(formField.autovalidateMode, equals(AutovalidateMode.always));
925+
926+
// When autovalidate is false
927+
await tester.pumpWidget(builder(autovalidate: false));
928+
929+
formField = tester.widget(formFieldFinder);
930+
expect(formField.autovalidate, isFalse);
931+
expect(formField.autovalidateMode, equals(AutovalidateMode.disabled));
932+
});
933+
934+
testWidgets('Form.autovalidate parameter is passed into class the property', (WidgetTester tester) async {
935+
const ObjectKey widgetKey = ObjectKey('key');
936+
937+
Widget builder({@required bool autovalidate}) {
938+
return MaterialApp(
939+
home: MediaQuery(
940+
data: const MediaQueryData(devicePixelRatio: 1.0),
941+
child: Directionality(
942+
textDirection: TextDirection.ltr,
943+
child: Center(
944+
child: Material(
945+
child: Form(
946+
key: widgetKey,
947+
autovalidate: autovalidate,
948+
child: Container(),
949+
),
950+
),
951+
),
952+
),
953+
),
954+
);
955+
}
956+
957+
// When autovalidate is true
958+
await tester.pumpWidget(builder(autovalidate: true));
959+
960+
final Finder formFinder = find.byKey(widgetKey);
961+
Form formWidget = tester.widget(formFinder);
962+
expect(formWidget.autovalidate, isTrue);
963+
expect(formWidget.autovalidateMode, equals(AutovalidateMode.always));
964+
965+
// When autovalidate is false
966+
await tester.pumpWidget(builder(autovalidate: false));
967+
968+
formWidget = tester.widget(formFinder);
969+
expect(formWidget.autovalidate, isFalse);
970+
expect(formWidget.autovalidateMode, equals(AutovalidateMode.disabled));
971+
});
889972
}

0 commit comments

Comments
 (0)