validate method
Validates the control
.
Implementation
@override
Map<String, dynamic>? validate(AbstractControl<dynamic> control) {
if (control is! FormGroup) {
// Maybe throw an exception is better
return <String, dynamic>{ValidationMessage.compare: true};
}
final mainControl = control.control(controlName);
final compareControl = control.control(compareControlName);
final error = {
ValidationMessage.compare: <String, dynamic>{
'control': mainControl.value,
'compareControl': compareControl.value,
'option': compareOption,
}
};
if (compareOption == CompareOption.equal &&
mainControl.isNull &&
compareControl.isNull) {
return null;
} else if (mainControl.isNull || compareControl.isNull) {
mainControl.setErrors(error);
return null;
} else if (mainControl.value is! Comparable<dynamic>) {
throw ValidatorException(
'Control "$controlName" must be of type "Comparable"');
}
try {
final meetsComparison = _meetsComparison(
mainControl.value as Comparable<dynamic>,
compareControl.value,
);
if (meetsComparison) {
mainControl.removeError(ValidationMessage.compare);
} else {
mainControl.setErrors(error);
mainControl.markAsTouched();
}
return null;
} on TypeError {
throw ValidatorException(
'Can\'t compare control "$controlName" of type "${mainControl.value.runtimeType}" with the control "$compareControlName" of type ${compareControl.value.runtimeType}');
}
}