🧩 Exercícios - Cap 13: Conectando ao Mundo (PokeAPI)

📖 Ver Cap 13

🎯 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:

  1. No PersonagemViewModel2, adicione um segundo estado:
    private val _poderPersonagem = mutableStateOf("")
    val poderPersonagem: State<String> = _poderPersonagem
    
  2. 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
        }
    }
    
  3. Compare com uma versão que chamasse repository.buscarPersonagem() duas vezes (uma para name, outra para power) — pense por que isso seria pior.

✅ Resultado Esperado


🆘 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

⬅️ Voltar para Exercícios