Form, TextFormField e TextField | Flutter
- Form, TextFormField e TextField | Flutter
Se você está criando um Formulário onde precisa de operações como salvar, resetar ou validar — use o TextFormField.
Caso contrário, para uma captura simples de entrada do usuário, o TextField é suficiente.
O TextFormField integra-se ao widget Form.
Ele é um widget de conveniência que envolve um TextField dentro de um FormField.
Não é obrigatório ter um Form como ancestral.
O Form apenas facilita operações como salvar, resetar ou validar vários campos de uma vez.
Para usar sem um Form, basta passar uma GlobalKey para o construtor e usar GlobalKey.currentState para salvar ou resetar o campo de formulário.
Exemplo:
TextFormField(
autovalidateMode: AutovalidateMode.always,
decoration: const InputDecoration(
icon: Icon(Icons.person),
hintText: 'Como as pessoas te chamam?',
labelText: 'Nome *',
),
onSaved: (String? value) {
// Código opcional que será executado
// quando o usuário salvar o formulário.
},
validator: (String? value) {
return value!.contains('@') ? 'Não use o caractere @.' : null;
},
)
O TextField é o campo de texto "puro", sem integração com Form.
- O TextField chama o callback
onChangedsempre que o usuário altera o texto. - Se o usuário indicar que terminou de digitar (por exemplo, pressionando o botão de enviar no teclado), o campo chama o callback
onSubmitted.
Show! Aqui está a tabelinha comparativa entre TextField e TextFormField:
| Característica | TextField | TextFormField |
|---|---|---|
| Integra com Formulário | ❌ Não integra diretamente. | ✅ Integra automaticamente com Form. |
| Validação | Manual (onChanged ou onSubmitted). | Com suporte fácil via validator(). |
| Salvar Dados | Manual. | Pode usar onSaved() para salvar campos. |
| Resetar Campos | Manual (limpar controller). | FormState.reset() reseta todos juntos. |
| Uso Ideal | Entrada simples de dados. | Formulários complexos com validação. |
Precisa de Form? | ❌ Não. | ❌ Não obrigatório, mas recomendado. |
Em resumo:
- TextField ➔ Para coisas simples e diretas, como uma caixa de pesquisa, login rápido, filtro etc.
- TextFormField ➔ Quando você tem vários campos e precisa validar, salvar ou resetar tudo junto.