mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
add onReset callback to FormField (#167060)
This PR adds onReset callback to FormField fixes #167057 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
This commit is contained in:
parent
b714d8b34c
commit
e78754267b
@ -466,6 +466,7 @@ class FormField<T> extends StatefulWidget {
|
||||
super.key,
|
||||
required this.builder,
|
||||
this.onSaved,
|
||||
this.onReset,
|
||||
this.forceErrorText,
|
||||
this.validator,
|
||||
this.errorBuilder,
|
||||
@ -485,6 +486,10 @@ class FormField<T> extends StatefulWidget {
|
||||
/// [FormState.save].
|
||||
final FormFieldSetter<T>? onSaved;
|
||||
|
||||
/// An optional method to call when the form field is reset via
|
||||
/// [FormFieldState.reset].
|
||||
final VoidCallback? onReset;
|
||||
|
||||
/// An optional property that forces the [FormFieldState] into an error state
|
||||
/// by directly setting the [FormFieldState.errorText] property without
|
||||
/// running the validator function.
|
||||
@ -631,6 +636,7 @@ class FormFieldState<T> extends State<FormField<T>> with RestorationMixin {
|
||||
_hasInteractedByUser.value = false;
|
||||
_errorText.value = null;
|
||||
});
|
||||
widget.onReset?.call();
|
||||
Form.maybeOf(context)?._fieldDidChange();
|
||||
}
|
||||
|
||||
|
||||
@ -89,6 +89,32 @@ void main() {
|
||||
await checkText('');
|
||||
});
|
||||
|
||||
testWidgets('onReset callback is called', (WidgetTester tester) async {
|
||||
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
|
||||
bool resetCalled = false;
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Form(
|
||||
key: formKey,
|
||||
child: FormField<String>(
|
||||
builder: (_) => const SizedBox.shrink(),
|
||||
onReset: () {
|
||||
resetCalled = true;
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(resetCalled, isFalse);
|
||||
|
||||
formKey.currentState!.reset();
|
||||
await tester.pump();
|
||||
|
||||
expect(resetCalled, isTrue);
|
||||
});
|
||||
|
||||
testWidgets('Validator sets the error text only when validate is called', (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user