range static method

FallbackRangeResult? range({
  1. required String title,
  2. String? startTitle,
  3. String? endTitle,
  4. num? startDefault,
  5. num? endDefault,
  6. num? min,
  7. num? max,
  8. num? step,
  9. FallbackNumberValidator? validator,
  10. bool returnDefaultOnEndOfInput = true,
})

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);
}