testWidgets('Form auto-validates form fields even before any have changed if autovalidateMode is set to always',(WidgetTestertester)async{
StringerrorText(Stringvalue)=>'error/$value';
Widgetbuilder(){
returnMaterialApp(
home:Directionality(
textDirection:TextDirection.ltr,
child:Center(
child:Material(
child:Form(
autovalidateMode:AutovalidateMode.always,
child:TextFormField(
validator:errorText,
),
),
),
),
),
);
}
// The issue only happens on the second build so we
// need to rebuild the tree twice.
awaittester.pumpWidget(builder());
awaittester.pumpWidget(builder());
// We expect validation error text being shown.
expect(find.text(errorText('')),findsOneWidget);
});
testWidgets('autovalidate parameter is still used if true',(WidgetTestertester)async{
FormFieldState<String>formFieldState;
StringerrorText(Stringvalue)=>'$value/error';
Widgetbuilder(){
returnMaterialApp(
home:MediaQuery(
data:constMediaQueryData(devicePixelRatio:1.0),
child:Directionality(
textDirection:TextDirection.ltr,
child:Center(
child:Material(
child:FormField<String>(
initialValue:'foo',
autovalidate:true,
builder:(FormFieldState<String>state){
formFieldState=state;
returnContainer();
},
validator:errorText,
),
),
),
),
),
);
}
awaittester.pumpWidget(builder());
expect(formFieldState.hasError,isTrue);
});
testWidgets('Form.reset() resets form fields, and auto validation will only happen on the next user interaction if autovalidateMode is onUserInteraction',(WidgetTestertester)async{