onValidation<TAbstractControl extends AbstractControl> method

  1. @protected
dynamic onValidation<TAbstractControl extends AbstractControl>({
  1. required List<ValidatorsFunction<TAbstractControl>> validators,
  2. required dynamic onCompleter(
    1. Completer<List<ValidationEvent>> completer,
    2. ValidatorsFunction<TAbstractControl> validator
    ),
  3. required Function onValidationFunction,
  4. 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();
}