🧩 Exercícios - Cap 13: Conectando ao Mundo (PokeAPI)
🎯 Antes de começar
No Cap 13 você modelou Personagem(val name: String, val power: String), criou o GameService (Beeceptor), o PersonagemRepository e o PersonagemViewModel2 com nomePersonagem + carregarPersonagem(). Depois de completar as três Práticas, faça o exercício extra abaixo para também aproveitar o campo power — que já existe no JSON, mas ainda não é usado.
💪 Exercício Extra 1: Aproveitando o Campo power (20 min)
Objetivo: Adicionar um segundo State ao PersonagemViewModel2, populando ambos a partir de uma única chamada suspend — evitando chamadas de rede repetidas.
Passos:
- No
PersonagemViewModel2, adicione um segundo estado:private val _poderPersonagem = mutableStateOf("") val poderPersonagem: State<String> = _poderPersonagem - Reescreva
carregarPersonagem()para guardar o resultado em uma variável local e usá-lo duas vezes:fun carregarPersonagem() { viewModelScope.launch { val personagem = repository.buscarPersonagem() _nomePersonagem.value = personagem.name _poderPersonagem.value = personagem.power } } - Compare com uma versão que chamasse
repository.buscarPersonagem()duas vezes (uma paraname, outra parapower) — pense por que isso seria pior.
✅ Resultado Esperado
- Após
carregarPersonagem(), tantonomePersonagemquantopoderPersonagemficam preenchidos com os dados do Beeceptor (ex:"Pikachu"e"Elétrico"). - Apenas uma chamada de rede (
repository.buscarPersonagem()) é feita para preencher os dois estados — economia de tempo e de “pedidos ao garçom”.
🆘 Resolução de Problemas Comuns
| Erro | Causa | Solução |
|---|---|---|
Unresolved reference: power |
A data class Personagem não tem o campo power, ou está escrito com outro nome |
Confirme data class Personagem(val name: String, val power: String) igual ao gabarito do Cap 13 |
poderPersonagem continua vazio ("") após carregar |
A atualização de _poderPersonagem está fora do viewModelScope.launch, ou usando outra variável |
Garanta que ambas as atualizações estejam dentro do mesmo bloco launch, usando a variável personagem |
| O app demora o dobro / faz duas requisições no Beeceptor | Chamou repository.buscarPersonagem() duas vezes (uma por campo) |
Guarde o resultado em val personagem = repository.buscarPersonagem() e leia .name e .power dessa mesma variável |