onValidation<TAbstractControl extends AbstractControl> method
dynamic
onValidation<TAbstractControl extends AbstractControl>({
- required List<
ValidatorsFunction< validators,TAbstractControl> > - required dynamic onCompleter(
- Completer<
List< completer,ValidationEvent> > - ValidatorsFunction<
TAbstractControl> validator
- Completer<
- required Function onValidationFunction,
- required Function afterCheck,
inherited
Implementation
@protected
onValidation<TAbstractControl extends AbstractControl>(
{required List<ValidatorsFunction<TAbstractControl>> validators,
required Function(Completer<List<ValidationEvent>> completer,
ValidatorsFunction<TAbstractControl> validator)
onCompleter,
required Function onValidationFunction,
required Function afterCheck}) async {
final haveRequestValidation = this._newRequestValidation != 0;
this._newRequestValidation++;
if (haveRequestValidation) {
return;
}
List<List<ValidationEvent>> groupErrors = [];
int oldRequestValidation = 0;
do {
oldRequestValidation = this._newRequestValidation;
//await Future.delayed(Duration(microseconds: 1));
this.reactionOnValidatorDisposers.forEach((r) => r());
this.reactionOnValidatorDisposers = [];
if (this.active) {
final errorsPromises = validators.map((validator) {
bool isFirstReaction = true;
final completer = Completer<List<ValidationEvent>>();
this.reactionOnValidatorDisposers.add(
when((_) {
if (isFirstReaction) {
onCompleter(completer, validator);
return isFirstReaction = false;
}
return true;
}, () => onValidationFunction()),
);
return completer.future;
});
groupErrors = await Future.wait(errorsPromises);
} else {
groupErrors = [];
}
} while (oldRequestValidation != this._newRequestValidation);
this._newRequestValidation = 0;
final List<ValidationEvent> events =
groupErrors.length > 0 ? combineErrors(groupErrors) : [];
runInAction(() {
this._errors =
events.where((e) => e.type == ValidationEventTypes.Error).toList();
this._warnings =
events.where((e) => e.type == ValidationEventTypes.Warning).toList();
this._informationMessages =
events.where((e) => e.type == ValidationEventTypes.Info).toList();
this._successes =
events.where((e) => e.type == ValidationEventTypes.Success).toList();
});
afterCheck();
}