Fala galera, para quem estiver fazendo essa parte do curso e tomar o erro abaixo:
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
A documentação afirma que se não for especificado o Dispatcher é utilizado o Default (basicamente vai utilizar a quantidade de threads disponiveis do aparelho para executar as tarefas):
If the context does not have any dispatcher nor any other ContinuationInterceptor, then Dispatchers.Default is used.
Código da solução:
viewModelScope.launch(Dispatchers.IO){
val contatos = contatoDao.buscaTodos()
_uiState.value = _uiState.value.copy(
contatos = contatos
)
}