Ola!
O erro Unresolved reference 'collect' ocorre quando o projeto não tem as dependências corretas para coroutines e Flow, ou quando você está tentando usar collect fora de um contexto de Flow.
1. Verifique se seu buscaTodos() realmente retorna um Flow<List<Produto>>
O método buscaTodos() no ProdutoDao precisa ser assim:
@Query("SELECT * FROM Produto")
fun buscaTodos(): Flow<List<Produto>>
Se ele retornar LiveData<List<Produto>> ou List<Produto>, o .collect {} não estará disponível.
2. Adicione (ou verifique) as dependências de coroutines e Flow no build.gradle (Module: app)
Certifique-se de ter essas dependências no seu build.gradle:
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
Também pode ser necessário adicionar essa (se estiver usando Flow com Room):
implementation "androidx.room:room-ktx:2.6.1"
3. Verifique se você está usando um lifecycleScope (se estiver em um Fragment ou Activity)
Se estiver dentro de uma Activity ou Fragment, prefira usar:
lifecycleScope.launch {
produtoDao.buscaTodos().collect { produtos ->
adapter.atualiza(produtos)
}
}
⚠ launch { ... } isolado pode não estar no escopo correto — evite isso fora de lifecycleScope, viewModelScope etc.
4. Caso esteja usando ViewModel
Se estiver dentro de uma ViewModel, use viewModelScope.launch { ... }.
Exemplo completo (em um Fragment):
class ProdutoFragment : Fragment() {
private val produtoDao: ProdutoDao by lazy {
// inicialização do dao
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lifecycleScope.launch {
produtoDao.buscaTodos().collect { produtos ->
adapter.atualiza(produtos)
}
}
}
}
Resumo do que revisar
- O método
buscaTodos() retorna um Flow - As dependências de
coroutines e room-ktx estão adicionadas - Está usando
lifecycleScope.launch ou viewModelScope.launch - Importou
import kotlinx.coroutines.flow.collect
Se você ainda tiver problemas, envie:
- A assinatura de
buscaTodos() no seu DAO - O bloco de código onde está usando o
launch - Suas dependências no
build.gradle
Abs;