validate method
Validates and parses a number.
Implementation
ValidationResult<NumberValidationIssue, num> validate(String input) {
final trimmed = input.trim();
if (trimmed.isEmpty) {
return const Left(NumberEmptyIssue());
}
final parsed = num.tryParse(trimmed);
if (parsed == null) {
return const Left(NumberInvalidFormatIssue());
}
if (!config.allowNegative && parsed < 0) {
return Left(NumberNegativeNotAllowedIssue(parsed));
}
if (config.integerOnly && parsed != parsed.toInt()) {
return Left(NumberNotIntegerIssue(parsed));
}
if (config.min != null && parsed < config.min!) {
return Left(
NumberTooSmallIssue(currentValue: parsed, minValue: config.min!),
);
}
if (config.max != null && parsed > config.max!) {
return Left(
NumberTooLargeIssue(currentValue: parsed, maxValue: config.max!),
);
}
if (config.maxDecimalPlaces != null) {
final decimalPlaces = _countDecimalPlaces(trimmed);
if (decimalPlaces > config.maxDecimalPlaces!) {
return Left(
NumberDecimalPlacesExceededIssue(
currentPlaces: decimalPlaces,
maxPlaces: config.maxDecimalPlaces!,
),
);
}
}
return Right(parsed);
}