🧩 Exercícios - Cap 19: Cadastro de Treinador: Formulários
🎯 Antes de começar
No Cap 19 você criou CadastroScreen() com validação de nickname (mínimo 3 letras), e nas Práticas Obrigatórias adicionou o campo de “E-mail” (validando @) com KeyboardType.Email, combinando tudo em formularioPronto. Depois de completar as duas Práticas, faça o exercício extra abaixo para adicionar um campo de Senha com texto oculto.
💪 Exercício Extra 1: Campo de Senha com PasswordVisualTransformation (20 min)
Objetivo: Adicionar um terceiro campo ao formulário — a senha — usando visualTransformation para ocultar o que o jogador digita, e somar essa validação a formularioPronto.
Passos:
- Adicione o import:
import androidx.compose.ui.text.input.PasswordVisualTransformation - Crie o estado e a regra de validação:
var senha by remember { mutableStateOf("") } val senhaValida = senha.length >= 6 - Adicione o
TextFieldda senha, com texto oculto:TextField( value = senha, onValueChange = { senha = it }, label = { Text("Senha") }, visualTransformation = PasswordVisualTransformation(), isError = senha.isNotEmpty() && !senhaValida, supportingText = { if (senha.isNotEmpty() && !senhaValida) { Text("A senha deve ter no mínimo 6 caracteres", color = Color.Red) } } ) - Atualize
formularioProntopara incluir a nova regra:val formularioPronto = nickname.length >= 3 && emailValido && senhaValida
✅ Resultado Esperado
- Ao digitar na “Senha”, os caracteres aparecem como
•••••em vez do texto real. - Se a senha tiver menos de 6 caracteres (e não estiver vazia), o campo fica com borda vermelha e a mensagem “A senha deve ter no mínimo 6 caracteres” aparece.
- O botão “Enviar”/”Confirmar Inscrição” só fica habilitado quando as três condições forem verdadeiras:
nicknamecom 3+ letras,emailcontém@, esenhacom 6+ caracteres.
🆘 Resolução de Problemas Comuns
| Erro | Causa | Solução |
|---|---|---|
Unresolved reference: PasswordVisualTransformation |
Faltou o import da classe | Adicione import androidx.compose.ui.text.input.PasswordVisualTransformation |
| A senha aparece como texto normal | Esqueceu visualTransformation = PasswordVisualTransformation() no TextField |
Adicione o parâmetro visualTransformation ao TextField da senha |
| O botão nunca habilita, mesmo com tudo certo | formularioPronto ainda usa apenas nickname.length >= 3 && emailValido, sem && senhaValida |
Garanta que formularioPronto combine as três condições com && |