range static method
Reads an ordered numeric range using the same validation path as number.
Start and end are prompted independently. Each accepted input must pass
finite-number parsing, optional min/max bounds, and validator.
Defaults are clamped and snapped to step before they are offered. The
returned values are ordered so FallbackRangeResult.start is always less
than or equal to FallbackRangeResult.end.
Implementation
static FallbackRangeResult? range({
required String title,
String? startTitle,
String? endTitle,
num? startDefault,
num? endDefault,
num? min,
num? max,
num? step,
FallbackNumberValidator? validator,
bool returnDefaultOnEndOfInput = true,
}) {
validateNumericConstraints(min: min, max: max, step: step);
final normalizedDefaults = startDefault == null || endDefault == null
? null
: normalizeSteppedRange(
startDefault,
endDefault,
min: min,
max: max,
step: step,
);
final normalizedStartDefault = startDefault == null
? null
: normalizedDefaults?.start ??
normalizeSteppedValue(
startDefault,
min: min,
max: max,
step: step,
);
final normalizedEndDefault = endDefault == null
? null
: normalizedDefaults?.end ??
normalizeSteppedValue(
endDefault,
min: min,
max: max,
step: step,
);
final start = number(
title: startTitle ?? '$title start',
defaultValue: normalizedStartDefault,
min: min,
max: max,
step: step,
validator: validator,
returnDefaultOnEndOfInput: returnDefaultOnEndOfInput,
);
if (start == null) return null;
final end = number(
title: endTitle ?? '$title end',
defaultValue: normalizedEndDefault,
min: min,
max: max,
step: step,
validator: validator,
returnDefaultOnEndOfInput: returnDefaultOnEndOfInput,
);
if (end == null) return null;
final ordered = _orderedRange(
start,
end,
min: min,
max: max,
);
return FallbackRangeResult(start: ordered.start, end: ordered.end);
}