Pular para o conteúdo principal

Sistema declarativo de forms

ArchbaseForm + ArchbaseFormController agregam valores e erros de um conjunto de campos, sem amarrar a um state mgmt externo.

Exemplo

final formController = ArchbaseFormController(
initialValues: {
'name': 'João',
'cpf': '',
'email': '',
},
);

ArchbaseForm(
controller: formController,
child: Column(
children: const [
ArchbaseFormTextField(name: 'name', label: 'Nome', required: true),
ArchbaseFormCpfField(name: 'cpf', required: true),
ArchbaseFormEmailField(name: 'email', required: true),
],
),
)

ElevatedButton(
onPressed: () async {
if (await formController.validate()) {
final values = formController.values;
print(values); // {'name': 'João', 'cpf': '...', 'email': '...'}
}
},
child: const Text('Salvar'),
);

Campos especializados

Pré-configurados com validador + máscara apropriada:

WidgetPara
ArchbaseFormTextFieldTexto livre
ArchbaseFormCpfFieldCPF (com máscara)
ArchbaseFormCnpjFieldCNPJ
ArchbaseFormCnhFieldCNH
ArchbaseFormPlateFieldPlaca BR (Mercosul ou antiga)
ArchbaseFormPhoneBrFieldTelefone BR
ArchbaseFormEmailFieldEmail
ArchbaseFormCepFieldCEP (com máscara)
ArchbaseFormBirthDateFieldData de nascimento

Cada um já tem validador BR embutido — você só passa name: + opções específicas do campo.

API do controller

final ctrl = ArchbaseFormController(initialValues: {...});

// Ler valores
final name = ctrl.value<String>('name');
final all = ctrl.values;

// Escrever programaticamente
ctrl.setValue('email', 'novo@ex.com');

// Validar tudo
final ok = await ctrl.validate();

// Resetar para initial
ctrl.reset();

// Listener
ctrl.addListener(() {
// Algum campo mudou
});