number static method

num? number({
  1. required String title,
  2. num? defaultValue,
  3. num? min,
  4. num? max,
  5. FallbackNumberValidator? validator,
  6. bool returnDefaultOnEndOfInput = true,
})

Reads a number.

Empty input returns defaultValue. End-of-input also returns defaultValue unless returnDefaultOnEndOfInput is false. Invalid numbers, out-of-range values, and validator errors are reported before asking again.

Implementation

static num? number({
  required String title,
  num? defaultValue,
  num? min,
  num? max,
  FallbackNumberValidator? validator,
  bool returnDefaultOnEndOfInput = true,
}) {
  while (true) {
    _writePrompt(title, defaultValue: defaultValue?.toString());

    final line = TerminalContext.input.readLineSync();
    if (line == null) {
      return returnDefaultOnEndOfInput ? defaultValue : null;
    }

    final text = line.trim();
    if (text.isEmpty) return defaultValue;

    final value = num.tryParse(text);
    if (value == null) {
      _writeError('Enter a number.');
      continue;
    }
    if (!value.isFinite) {
      _writeError('Enter a finite number.');
      continue;
    }
    if (min != null && value < min) {
      _writeError('Enter a number at least $min.');
      continue;
    }
    if (max != null && value > max) {
      _writeError('Enter a number at most $max.');
      continue;
    }

    final error = _numberValidationError(value, validator);
    if (error != null) {
      _writeError(error);
      continue;
    }

    return value;
  }
}