No aula Autenticando usuário, nós implementamos a opção de autenticar o login de um usuário, e utilizados coroutines e flow para retornar o usuário e ao validar o id e senha ele abre a tela de listaProdutosActivity. O problema ocorre quando é efetuada uma troca de senha do usuário já logado, ele insere novamente a tela de listaProdutosActivity na pilha de telas, sobrepondo a mesma ou outra telas já abertas.
Qual solução eu posso adotar e qual a melhor forma de evitar esse tipo de ocorrência? Pelo meu pouco conhecimento acredito estar relacionado ao uso do flow que fica verificando se houve alguma alteração de dados, mas não sei dizer ao certo porque essa chamada de abertura ocorre na tela de LoginActivity. Quando a tela de ListaProdutosActivity abre não deveria ser interrompido o uso do flow por conta do ciclo de vida da activity em que ele foi chamado?
Abaixo segue o código de abertura da tela chamando o método de autentica e a query que é executada.
lifecycleScope.launch {
usuarioDao.autentica(usuarioId, senha).collect { usuario ->
usuario?.let {
dataStore.edit { preferences ->
preferences[usuarioLogadoPreferences] = usuario.id
**vaiPara(ListaProdutosActivity::class.java)**
}
}
}
}
@Query("SELECT * FROM Usuario WHERE id = :usuarioId AND senha = :senha")
fun autentica(usuarioId: String, senha: String): Flow<Usuario?>