formaestro

Pub

Pub CI coverage license

A reactive, async-first form engine for Flutter with cross-field validation and a delightful DX.

Repository: https://github.com/MarciohsjOliveira/formaestro

Quickstart

// Define your schema
final schema = FormaestroSchema({
  'email': FieldX<String>(
    validators: [Validators.required(), Validators.email()],
  ),
  'password': FieldX<String>(validators: [Validators.minLen(8)]),
  'confirm': FieldX<String>(),
}, rules: [
  Rule.cross(['password', 'confirm'], (values) {
    return values['password'] == values['confirm']
        ? null
        : 'Passwords mismatch';
  }),
]);

// Create the form (with debounce)
final form = Formaestro(schema, debounce: const Duration(milliseconds: 250));

// Bind to your widgets
final email = form.field<String>('email');
// TextField(
//   onChanged: email.setValue,
//   decoration: InputDecoration(errorText: email.error),
// )

final ok = await form.validateAll();
if (ok) {
  // submit form.values
}

Examples

  • Runnable app under /example:
    • signup with async validators
    • cross-field rules
    • debounce + cancellation

Features

  • Type-safe fields (FieldX
  • Async-first validation (debounce + composable validators)
  • Cross-field rules (Rule.cross / Rule.crossAsync)
  • Reactive streams: valueStream / errorStream
  • Framework-agnostic (BLoC / Riverpod / Provider)

Roadmap

  • Adapters for flutter_bloc, riverpod
  • i18n message catalogs (en, pt-BR)
  • Field arrays and multi-step wizard

Contributing

See CONTRIBUTING.md.

License

MIT

Install

dependencies:
  formaestro: ^0.1.0

Features

  • Type-safe fields (FieldX<T>)
  • Async-first validation (debounce + cancellation-friendly)
  • Cross-field rules (Rule.cross / Rule.crossAsync)
  • Composable validators (sync/async)
  • Framework-agnostic: works with BLoC / Riverpod / Provider

Demo (GIF)

demo

FAQ

Is it a replacement for Form/TextFormField? No. Use them together if you prefer. Formaestro focuses on orchestration & validation.

How do I perform server validation? Create an async validator that calls your API (see example).

Testing

Run flutter test --coverage. The suite includes stream reactivity, async validators and cross-field rules.

Community

Use GitHub Issues with our templates for bugs and features.

Libraries

formaestro
Public exports for formaestro package.