Observando dados com Flow
Reaja às alterações do banco de dados de forma reativa.
Observando dados com Flow é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.
Leituras reativas do banco de dados
Em vez de fazer uma consulta apenas uma vez, o Room pode retornar um Fluxo que emite um novo valor sempre que os dados subjacentes mudam. Sua interface se atualiza automaticamente.
Retornando um Fluxo de um DAO
Declare o tipo de retorno como Flow<...>. Observe que essa função não é uma função suspensa.
@Query("SELECT * FROM users ORDER BY name")
fun observeUsers(): Flow<List<User>>Por que não usar uma função suspensa aqui
Uma função suspend retorna um único resultado e termina. Um Flow é um fluxo contínuo, portanto é uma função comum que retorna o objeto de fluxo; você o coleta ao longo do tempo.
Como o Room sabe quando emitir novamente
O Room acompanha quais tabelas uma consulta acessa. Quando uma escrita afeta essas tabelas, o Room executa a consulta novamente e emite o resultado atualizado pelo Fluxo. Isso é automático.
Coletando em uma corrotina
Você coleta o fluxo dentro de uma corrotina, normalmente no ViewModel.
viewModelScope.launch {
dao.observeUsers().collect { users ->
_uiState.value = UiState(users)
}
}Mapeando o Fluxo
Você pode transformar o fluxo com operadores como map antes de expô-lo.
val names: Flow<List<String>> =
dao.observeUsers().map { list ->
list.map { it.name }
}Transformando-o em StateFlow
Converta um fluxo frio do DAO em um StateFlow quente para a interface usando stateIn.
val uiState = dao.observeUsers()
.map { UiState(it) }
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Coletando no Compose
A tela coleta esse estado levando o ciclo de vida em consideração, exatamente como você aprendeu anteriormente.
@Composable
fun UsersScreen(vm: UserViewModel) {
val state by vm.uiState
.collectAsStateWithLifecycle()
UserList(state.users)
}A cadeia reativa completa
Juntando tudo:
- O Room emite quando os dados mudam.
- O ViewModel mapeia os dados para o estado da interface por meio de
stateIn. - O Compose coleta com
collectAsStateWithLifecycle.
Escreva no banco de dados de qualquer lugar, e a tela se atualizará sozinha.
Fonte única da verdade
Esse padrão faz do banco de dados a fonte única da verdade. A interface nunca mantém cópias desatualizadas; ela sempre reflete o que está realmente armazenado.
As escritas acionam atualizações
Qualquer inserção, atualização ou exclusão em uma tabela observada faz o fluxo emitir novamente, portanto você não precisa atualizar manualmente a lista depois de uma alteração.
suspend fun addUser(u: User) = dao.insert(u)
// observeUsers() flow re-emits automaticallyVerificação rápida
Teste sua compreensão sobre a observação de dados com Fluxo.
Recapitulação
Você aprendeu:
- Os métodos de DAO que retornam
Flowemitem novamente quando os dados mudam. - Eles são funções normais (não suspensas) que retornam um fluxo.
- Use
stateIn+collectAsStateWithLifecyclepara atualizar a interface de forma reativa. - O banco de dados se torna a fonte única da verdade.
Perguntas Frequentes
A aula “Observando dados com Flow” é grátis?
Sim — o texto completo de “Observando dados com Flow” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.
O que vou aprender em “Observando dados com Flow”?
Reaja às alterações do banco de dados de forma reativa. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Android Academy?
Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Observando dados com Flow”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Android Academy?
Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Entidades e DAOs
- A classe de banco de dados Room
- Consultas e relacionamentos
- Observando dados com Flow