🎉
Flowで受け取った値をDataBindingするためにMutableLiveDataにする
難しく考えていたけど簡単だったのでほぼ独り言です。
package sobaya.tools.flow_to_mutablelivedata
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
fun <T> ViewModel.flowToMutableLiveData(flow: Flow<T>): MutableLiveData<T> {
val liveData = MutableLiveData<T>()
viewModelScope.launch {
liveData.postValue(flow.firstOrNull())
}
return liveData
}
APIから受け取ったFlowの中身を画面と連携させる時に使えます。
使い方
private val request = repository.getRepo("sobaya-0141")
val test = flowToMutableLiveData(request.map { it.body()?.getOrNull(0)?.name })
testを画面とDataBindingで繋ぎます。
Discussion