Como controlar estados da View usando Sealed Class
Um código mais organizado na comunicação entre a ViewModel e a View.
Algo que deve incomodar muitos desenvolvedores atualmente é o modo como a ViewModel se comunica com a View. Boa parte dos exemplos que encontramos na internet funcionam bem, porém acaba não sendo uma solução centralizada e, com o tempo, dependendo do tamanho do seu app, deixa o código bem desorganizado.
Neste post vamos mostrar uma solução simples para esse problema, utilizando um pouco do conceito de Programação Reativa. A ideia é ter apenas 1 meio para controlar o fluxo de mensagens de uma parte da aplicação, com uma Sealed Class para montar a hierarquia de “estados de tela” e 1 observer na View para receber as mensagens.
Tem exemplos para ficar mais claro? Sim, tem exemplos! Neste código vamos consultar uma lista de filmes para serem exibidos e usar a ViewModel para pegar os dados do Repository e Retornar a View.
Primeiro um exemplo sem a solução.
Parece que ficou bom desse jeito, não é? Simples e prático, mas a vida é uma caixinha de surpresas. E se quisermos agora mostrar uma mensagem de erro, como faríamos?
Começou a ficar bagunçado!
Agora a View precisa ter 2 observers separados e, se quisermos adicionar mais ações, teremos que ficar criando Observers infinitamente ou começarmos a tirar a lógica do ViewModel e colocarmos na View, removendo essa centralização de controle que estamos tentando criar.
Vamos agora aplicar o conceito do post para organizar o envio de mensagens entre ViewModel e a View.
Primeiro, criamos uma Sealed Class que vai representar os “estados da tela”. No nosso caso, como estamos na tela de Movie vamos criar a MovieViewState (sim, criamos um state para cada View).
Agora, dentro da ViewModel vamos instanciar um MutableLiveData, que vai receber o tipo da SealedClass que acabamos de criar ao invés da lista de filmes.
Para aplicações menos complexas, que não exigem muitas customizações de estado de tela, podemos criar uma SealedClass genérica. Vamos chamá-la de NetworkViewState.
Ficou bem melhor, não é mesmo? Agora podemos adicionar várias interações com a View, mantendo a mesma estrutura e deixando o código bem mais organizado. Ficou alguma dúvida ou tem alguma coisa a dizer? Deixe um comentário. Até a próxima!
Quer fazer parte de um time com mais de 50 devs Android, que possuem sua própria comunidade? Aqui, temos reuniões bi-semanais para discussão e troca de ideias e promovemos treinamentos dos mais diversos temas. Para isso, você pode ter qualquer tempo de experiência, idade, gênero ou qualquer outro ponto que não seja o conhecimento na plataforma e a senioridade de desenvolvimento e de comunicação. Para se candidatar, clique aqui se você estiver em São Paulo ou aqui se você estiver no Rio de Janeiro.