@@ -503,20 +503,22 @@ void main() {
503503 });
504504 group ('reset -' , () {
505505 testWidgets (
506- 'Should avoid reset recursion when value returns to initial in onChanged ' ,
506+ 'Should avoid reset recursion when reset is called after dirty state ' ,
507507 (tester) async {
508508 const textFieldName = 'text' ;
509509 final textFieldKey = GlobalKey <FormBuilderFieldState >();
510510 var onChangedCalls = 0 ;
511+ var onChangedCallsBeforeReset = 0 ;
512+ bool ? isDirtyInResetOnChanged;
511513 final testWidget = FormBuilderTextField (
512514 name: textFieldName,
513515 key: textFieldKey,
514516 initialValue: 'hi' ,
515517 onChanged: (value) {
516518 onChangedCalls++ ;
517519 final state = textFieldKey.currentState;
518- if (value == state? .initialValue && state ? .isDirty == true ) {
519- state? .reset () ;
520+ if (value == state? .initialValue) {
521+ isDirtyInResetOnChanged = state? .isDirty ;
520522 }
521523 },
522524 );
@@ -525,12 +527,18 @@ void main() {
525527 final widgetFinder = find.byWidget (testWidget);
526528 await tester.enterText (widgetFinder, 'test' );
527529 await tester.pumpAndSettle ();
528- await tester.enterText (widgetFinder, 'hi' );
530+
531+ expect (textFieldKey.currentState? .isDirty, true );
532+ onChangedCallsBeforeReset = onChangedCalls;
533+
534+ textFieldKey.currentState? .reset ();
529535 await tester.pumpAndSettle ();
530536
531537 expect (tester.takeException (), isNull);
538+ expect (textFieldKey.currentState? .value, equals ('hi' ));
532539 expect (textFieldKey.currentState? .isDirty, false );
533- expect (onChangedCalls, equals (2 ));
540+ expect (onChangedCalls, equals (onChangedCallsBeforeReset + 1 ));
541+ expect (isDirtyInResetOnChanged, isFalse);
534542 },
535543 );
536544 testWidgets ('Should reset to null when call reset' , (tester) async {
0 commit comments