Interações, Gestos, Teclado Virtual e Validação de Inputs
Instruções Gerais:
- Resolva as atividades em ordem progressiva de maturidade.
- Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
- Consulte o gabarito comentado ao final de cada questão para autoavaliação.
🎯 Nível 1: Fundamentos
Problema 8.1 — Campo de Senha com PasswordVisualTransformation e Toggle de Visibilidade
Contexto: Campo de Senha com PasswordVisualTransformation e Toggle de Visibilidade no contexto de Interações, Gestos, Teclado Virtual e Validação de Inputs.
Requisitos de Execução:
- Criar campo de senha com ícone de alternância para exibir/ocultar caracteres.
Resultado Esperado
Entrada de senha segura com controle de visibilidade.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_8_1_SeuNome - Envie na tarefa:
Atividade Cap 8 - Interações, Gestos, Teclado Virtual e Validação de Inputs
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.ui
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation
@Composable
fun CampoSenha(senha: String, onSenhaChange: (String) -> Unit) {
var visivel by remember { mutableStateOf(false) }
OutlinedTextField(
value = senha,
onValueChange = onSenhaChange,
label = { Text("Senha Corporativa") },
visualTransformation = if (visivel) VisualTransformation.None else PasswordVisualTransformation(),
trailingIcon = {
IconButton(onClick = { visivel = !visivel }) {
Text(if (visivel) "🙈" else "👁️")
}
}
)
}
🔍 Nível 2: Prática
Problema 8.2 — Opções de Teclado Virtual com KeyboardOptions (Email, Número)
Contexto: Opções de Teclado Virtual com KeyboardOptions (Email, Número) no contexto de Interações, Gestos, Teclado Virtual e Validação de Inputs.
Requisitos de Execução:
- Configurar teclado numérico para digitação de CPF com ação
ImeAction.Next.
Resultado Esperado
Teclado virtual customizado e integrado com ações de foco.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_8_2_SeuNome - Envie na tarefa:
Atividade Cap 8 - Interações, Gestos, Teclado Virtual e Validação de Inputs
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.ui
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
@Composable
fun CampoDocumentoCpf(cpf: String, onCpfChange: (String) -> Unit, onAvancar: () -> Unit) {
OutlinedTextField(
value = cpf,
onValueChange = onCpfChange,
label = { Text("CPF (somente numeros)") },
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Next
),
keyboardActions = KeyboardActions(onNext = { onAvancar() })
)
}
⚡ Nível 3: Integração
Problema 8.3 — Validação em Tempo Real com Mensagens de Erro (supportingText)
Contexto: Validação em Tempo Real com Mensagens de Erro (supportingText) no contexto de Interações, Gestos, Teclado Virtual e Validação de Inputs.
Requisitos de Execução:
- Validar e-mail exibindo borda vermelha e texto de suporte quando o formato for inválido.
Resultado Esperado
Feedback imediato de validação de formulário.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_8_3_SeuNome - Envie na tarefa:
Atividade Cap 8 - Interações, Gestos, Teclado Virtual e Validação de Inputs
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.ui
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@Composable
fun CampoEmailValidado(email: String, onEmailChange: (String) -> Unit) {
val ehValido = email.contains("@") && email.contains(".")
val exibirErro = email.isNotEmpty() && !ehValido
OutlinedTextField(
value = email,
onValueChange = onEmailChange,
label = { Text("E-mail") },
isError = exibirErro,
supportingText = {
if (exibirErro) Text("Formato de e-mail corporativo invalido")
}
)
}
🏆 Nível 4: Desafio Corporativo
Problema 8.4 — Formulário de Cadastro com Validação de Múltiplos Campos e Habilitação de Botão
Contexto: Formulário de Cadastro com Validação de Múltiplos Campos e Habilitação de Botão no contexto de Interações, Gestos, Teclado Virtual e Validação de Inputs.
Requisitos de Execução:
- Criar tela de cadastro que mantenha o botão ‘Cadastrar’ desabilitado até que todos os campos estejam válidos.
Resultado Esperado
Formulário corporativo blindado com regras de negócio integradas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_8_4_SeuNome - Envie na tarefa:
Atividade Cap 8 - Interações, Gestos, Teclado Virtual e Validação de Inputs
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.ui
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.*
@Composable
fun FormularioCompleto(onSubmit: () -> Unit) {
var nome by remember { mutableStateOf("") }
var email by remember { mutableStateOf("") }
val formularioValido = nome.isNotBlank() && email.contains("@")
Column {
CampoTextoCustomizado(valor = nome, onValorChange = { nome = it }, label = "Nome Completo")
CampoEmailValidado(email = email, onEmailChange = { email = it })
Button(onClick = onSubmit, enabled = formularioValido) {
Text("Concluir Cadastro")
}
}
}