👉 Using LiveData & Flow in MVVM — Part I - ProAndroidDev
Kotlin Flow の登場で盛り上がってきました。
どれにします? どの流れにします?
Repository
Result を返す。
Flow<Result>を返す。
ViewModel
Result を受けて、LiveData<Result> を渡す。
Flow<Result> を受けて、LiveData<Result> を渡す。
Fragment
LiveData<Result> を受け取る。
Flow<Result> を受け取る。
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(
this,
viewModelFactory
).get(WeatherForecastDataStreamFlowViewModel::class.java)
// Consume data when fragment is started
lifecycleScope.launchWhenStarted {
// Since collect is a suspend function it needs to be called
// from a coroutine scope
viewModel.weatherForecast.collect {
when (it) {
Result.Loading -> {
Toast.makeText(context, "Loading", Toast.LENGTH_SHORT).show()
}
is Result.Success -> {
tvDegree.text = it.data.toString()
}
Result.Error -> {
Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show()
}
}
}
}
}
WeatherForecastDataStreamFlowFragment #L47-L75
まとめ
とはいえ、今はまだ、完全に LiveData は捨てれんよの。
👉 Kotlin で Result
👉 Kotlin Flow vs Android LiveData - Stack Overflow
👉 From RxJava 2 to Kotlin Flow: Threading - ProAndroidDev