Android Dev BR
Published in

Android Dev BR

Construindo um projeto Android com UnidirectionalDataFlow e JetpackCompose

Photo by Firdouss Ross on Unsplash
  • Noção básica sobre UnidirectionalDataFlow
  • Noção básica sobre Jetpack Compose
  • Noção básica sobre Flow, SharedFlow e StateFlow
Examplos de UnidirectionalDataFlow

State, Actions & Effects ⛱

Para começarmos precisamos entender que a ideia desse artigo é fazer o UnidirectionalDataFlow dividir o app em 3 áreas principais:

  • State: Responsável por segurar a ultima informação persistida na tela. Ele vai representar, em forma de data class, o que a view deve mostrar.
  • Actions: Consistem em interações do usuário ou algum evento do ciclo de vida do Android.
  • Effects: Ocorrências únicas de UI que não persistem, como navegação ou dialogs (os efeitos vêm de eventos do usuário)

Detalhando a implementação 🍍

Vamos conversar um pouco sobre essas escolhas.

Como eu faço para emitir uma ação de navegação utilizando apenas uma model que faz a conversa entre a minha ViewModel e o meu código Compose?

Como eu faço para emitir um snackbar?

Como eu faço para responder um ação do usuário só depois de uma resposta de requisição?

🕵 O fim do LiveData?

Então agora começamos a repensar no que devemos utilizar no nosso código, já que LiveData vai dar tanto trabalho assim e temos um aliado muito forte que faz a mesma coisa pela metade do esforço.

Actions 📬

🚦Pending actions

As nossas ações vão ser apenas representadas por interações do usuário ou eventos do ciclo de vida do Android. E por não sabermos quando isso vai acontecer iremos colocar isso em uma fila de ações, para serem executadas assim que possível. Para isso iremos utilizar nosso grande aliado da vez: o MutableSharedFlow.

Ok! Mas se não são as ações que vão comunicar navegações, snackbars, dialogs, etc… o que vai?

Effects ⚡️

States 👥

♻️ Atualizando estados e mantendo os dados

Já vimos que estamos utilizando MutableStateFlow para emitir valores para nossa UI e por isso a pergunta da vez é:

Como atualizar uma informação da tela sem perder outra?

Como estamos utilizando apenas uma classe essa pergunta é super válida e fácil de responder.

👷 Mãos a obra

Na nossa classe de state temos um parâmetro de isLoading e podemos usar ele como exemplo.

🍥 Conclusão

Nessa conclusão espero que você tenha entendido as ideias trabalhadas nesse artigo sobre como estruturar um fluxo UDF e com ele consegue alterar states da tela, emitir effects e receber actions em compose.

🎉 Obrigado!!

Chegamos no fim desse artigo, muito obrigado por ter separado esse tempo do seu dia para ler :)

--

--

Artigos em português sobre Android, curados pela comunidade Android Dev BR. Junte-se a nós: https://androiddevbr.org/.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Lucas C. Wottrich

Android Developer at iFood. Descomplicando códigos e ajudando a comunidade a crescer com conteúdos pt-BR.