🧩 Exercícios - Cap 09: Vida Reativa (Estado no Compose)

📖 Ver Cap 09

🎯 Antes de começar

No Cap 09 você criou a “Arena de Treino” com var vidaInimigo by remember { mutableStateOf(100) } e um botão “Atacar” que diminui a vida (Prática 1), além de um if que troca o texto quando o inimigo é derrotado (Prática 2). Depois de completar as duas Práticas, faça o exercício extra abaixo para praticar estado + if limitando um valor (impedir que ele passe de um máximo).


💪 Exercício Extra 1: Botão de Cura com Limite Máximo (15 min)

Objetivo: Combinar remember/mutableStateOf com if para impedir que um valor de estado passe de um limite (vida máxima = 100).

Passos:

  1. Crie uma nova função @Composable fun TelaCura() { ... } com var vidaJogador by remember { mutableStateOf(50) }.
  2. Mostre o valor: Text("Vida do Jogador: $vidaJogador / 100").
  3. Adicione um botão que cura +20, mas sem passar de 100:
    Button(onClick = {
        vidaJogador = if (vidaJogador + 20 > 100) 100 else vidaJogador + 20
    }) {
        Text("Curar (+20 HP)")
    }
    
  4. Rode na Preview/emulador e clique várias vezes no botão.

✅ Resultado Esperado


🆘 Resolução de Problemas Comuns

Erro Causa Solução
Val cannot be reassigned ao clicar no botão A variável de estado foi criada com val em vez de var Use var vidaJogador by remember { mutableStateOf(50) }
A tela não atualiza ao clicar (número parado) Faltou a palavra by, então vidaJogador é um objeto MutableState<Int>, não um Int direto Use by remember { ... } (com by), e confira o import de getValue/setValue (androidx.compose.runtime.*)
O valor passa de 100 (ex.: chega a 110, 130…) A condição do if está invertida ou ausente Confira: if (vidaJogador + 20 > 100) 100 else vidaJogador + 20

⬅️ Voltar para Exercícios