Suas ideias em realidade digital!
Antes das Coroutines, usávamos:
Coroutines simplificam código assíncrono, deixando mais limpo e seguro.
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2"
suspend fun fetchUsers(): List {
return api.getUsers()
}
Agora pode ser chamada dentro de coroutine:
viewModelScope.launch {
val users = repository.fetchUsers()
}
Flow é uma stream assíncrona de dados. Ideal para:
fun getUsers(): Flow> {
return dao.getAll()
}
class UserViewModel(
private val repository: UserRepository
) : ViewModel() {
private val _users = MutableStateFlow>(emptyList())
val users: StateFlow> = _users
fun loadUsers() {
viewModelScope.launch {
repository.getUsers().collect {
_users.value = it
}
}
}
}
lifecycleScope.launchWhenStarted {
viewModel.users.collect { list ->
// Atualiza UI
}
}
Coroutines funcionam perfeitamente com: