attach method
Future<ValidationResult?> ?
attach(
- BuildContext context,
- FormKey key,
- Object? value,
- Validator? validator,
Implementation
Future<ValidationResult?>? attach(
BuildContext context, FormKey key, Object? value, Validator? validator) {
final oldState = _attachedInputs[key];
var state = FormValueState(value: value, validator: validator);
if (oldState == state) {
return null;
}
var lifecycle = oldState == null
? FormValidationMode.initial
: FormValidationMode.changed;
_attachedInputs[key] = state;
// validate
var future = validator?.validate(context, value, lifecycle);
if (future != null) {
_validity[key] = future;
}
// check for revalidation
Map<FormKey, Future<ValidationResult?>> revalidate = {};
for (var entry in _attachedInputs.entries) {
var k = entry.key;
var value = entry.value;
if (key == k) {
continue;
}
if (value.validator != null && value.validator!.shouldRevalidate(key)) {
revalidate[k] =
value.validator!.validate(context, value.value, lifecycle);
}
}
for (var entry in revalidate.entries) {
var k = entry.key;
var future = entry.value;
var attachedInput = _attachedInputs[k]!;
attachedInput = FormValueState(
value: attachedInput.value, validator: attachedInput.validator);
_attachedInputs[k] = attachedInput;
_validity[k] = future;
}
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
notifyListeners();
});
return future;
}