1
resposta

Unresolved reference 'collect'.

O compilador não reconhece a propriedade collect no código abaixo:

launch { produtoDao.buscaTodos().collect { produtos -> adapter.atualiza(produtos) } }

Meu ambiente está assim:

ext.kotlin_version = '2.0.20' ext { agp_version = '8.10.0' }

compileSdk 35 buildToolsVersion "30.0.3" minSdkVersion 22 targetSdk 35

1 resposta

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;