🎉

Flowで受け取った値をDataBindingするためにMutableLiveDataにする

2021/02/02に公開

難しく考えていたけど簡単だったのでほぼ独り言です。

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