form static method

FallbackFormResult? form({
  1. required List<FallbackFormField> fields,
  2. String? crossValidator(
    1. List<String> values
    )?,
  3. bool returnDefaultOnEndOfInput = true,
})

Reads a multi-field form in line mode.

Fields are prompted in order. Per-field validators use the text fallback convention: return null for success or an error message. The optional crossValidator runs after all fields are accepted. Returning '' from either validator type is also accepted as success for backwards compatibility.

Implementation

static FallbackFormResult? form({
  required List<FallbackFormField> fields,
  String? Function(List<String> values)? crossValidator,
  bool returnDefaultOnEndOfInput = true,
}) {
  if (fields.isEmpty) return const FallbackFormResult([]);

  while (true) {
    final values = <String>[];

    for (final field in fields) {
      final value = _readText(
        title: _fallbackFormFieldTitle(field),
        defaultValue: field.masked ? null : _initialFormDefault(field),
        required: field.required,
        validator: field.validator,
        returnDefaultOnEndOfInput: returnDefaultOnEndOfInput,
      );

      if (value == null) return null;
      values.add(value);
    }

    final error = normalizeValidationError(crossValidator?.call(values));
    if (error == null) return FallbackFormResult(values);

    _writeError(error);
  }
}