1
1
import 'package:flutter/material.dart' ;
2
+ import 'package:flutter/services.dart' ;
2
3
import 'package:flutter_form_builder/flutter_form_builder.dart' ;
3
4
import 'package:flutter_test/flutter_test.dart' ;
4
5
@@ -181,6 +182,21 @@ void main() {
181
182
182
183
expect (find.text (errorTextField), findsOneWidget);
183
184
});
185
+ testWidgets (
186
+ 'Should not show error when init form and AutovalidateMode is disabled' ,
187
+ (tester) async {
188
+ const textFieldName = 'text4' ;
189
+ const errorTextField = 'error text field' ;
190
+ final testWidget = FormBuilderTextField (
191
+ name: textFieldName,
192
+ autovalidateMode: AutovalidateMode .disabled,
193
+ validator: (value) => errorTextField,
194
+ );
195
+ await tester.pumpWidget (buildTestableFieldWidget (testWidget));
196
+ await tester.pumpAndSettle ();
197
+
198
+ expect (find.text (errorTextField), findsNothing);
199
+ });
184
200
testWidgets (
185
201
'Should show error when AutovalidateMode is onUserInteraction and change field' ,
186
202
(tester) async {
@@ -199,6 +215,47 @@ void main() {
199
215
200
216
expect (find.text (errorTextField), findsOneWidget);
201
217
});
218
+ testWidgets (
219
+ 'Should show error when init form and AutovalidateMode is onUnfocus' ,
220
+ (tester) async {
221
+ const textFieldName = 'text4' ;
222
+ const errorTextField = 'error text field' ;
223
+ final testWidget = FormBuilderTextField (
224
+ name: textFieldName,
225
+ autovalidateMode: AutovalidateMode .onUnfocus,
226
+ validator: (value) => errorTextField,
227
+ );
228
+ final widgetFinder = find.byWidget (testWidget);
229
+
230
+ // Init form
231
+ await tester.pumpWidget (buildTestableFieldWidget (
232
+ Column (
233
+ children: [
234
+ testWidget,
235
+ ElevatedButton (onPressed: () {}, child: const Text ('Submit' )),
236
+ ],
237
+ ),
238
+ autovalidateMode: AutovalidateMode .onUnfocus,
239
+ ));
240
+ await tester.pumpAndSettle ();
241
+ final focusNode =
242
+ formKey.currentState? .fields[textFieldName]? .effectiveFocusNode;
243
+ expect (find.text (errorTextField), findsNothing);
244
+ expect (Focus .of (tester.element (widgetFinder)).hasFocus, false );
245
+ expect (focusNode? .hasFocus, false );
246
+
247
+ // Focus input and write text
248
+ await tester.enterText (widgetFinder, 'test' );
249
+ await tester.pumpAndSettle ();
250
+ expect (Focus .of (tester.element (widgetFinder)).hasFocus, true );
251
+ expect (focusNode? .hasFocus, true );
252
+ expect (find.text (errorTextField), findsNothing);
253
+
254
+ // Unfocus input and show error
255
+ await tester.sendKeyEvent (LogicalKeyboardKey .tab);
256
+ await tester.pumpAndSettle ();
257
+ expect (find.text (errorTextField), findsOneWidget);
258
+ });
202
259
});
203
260
group ('isDirty - ' , () {
204
261
testWidgets ('Should not dirty by default' , (tester) async {
0 commit comments