【Kotlin】ぼくらは Flow の マーブルダイアグラム を見るのか。

ドキュメントや関連記事を見てもよく意味が分からないような複雑なオペレーターの機能が、一見するだけでで分かることがよくありました。

Reactivex-FlatMap
👉 ReactiveX - FlatMap operator 

Kotlin Flow のオペレーターたちも、これらの名前や機能を元に作られているので、上記 ReactiveX サイトのマーブル図を見れば大体は分かりますが。

Kotlin Flow 向けにも公開してる方がいます。

マーブルをドラッグもできます。

FlowMarbles
👉 FlowMarbles 

ソースコードも確認できるようです。

👉 rougsig/flowmarbles: Interactive diagrams of Kotlin Flow https://flowmarbles.com 


複数の Flow を受け取る How to collect multiple flows

パラレルで同じライフサイクルの場合だけども。

flow-lifecycle



launch をネストしていますね!


Medium.com で表示

👉 A safer way to collect flows from Android UIs | by Manuel Vivo | Android Developers | Medium 


今どきの Retrofit と LiveData で Coroutine

ありがとうございます。


👉 Retrofit 

ご存知の通り Retrofit2 では、サスペンドな関数も利用できるようになっております。

👉 SpaceX REST API で試す Retrofit の coroutine 対応 


// NewModel.kt
@GET("/feed/here/")
suspend fun getData(@Query("token") token : String) : Status


// NewRepository.kt
class Repository {
  var client = RetrofitService.createService(JsonApi::class.java)
  suspend fun getData(token : String) = client.getData(token)
}

ので、以下のようなこれまでのコードは、


// OldViewModel.kt
val data = MutableLiveData<Status>()

private fun loadData(token: String){
  viewModelScope.launch {
    val retrievedData = withContext(Dispatchers.IO) {
      repository.getData(token)
    }
    data.value = retrievedData
  }
}

シンプルに以下のように書けます。


// NewViewModel.kt
val data : LiveData<Status> = liveData(Dispatchers.IO) {
      val retrievedData = repository.getData(token)
      emit(retrievedData)
    }

ありがとうございます。

👉 Exploring new Coroutines and Lifecycle Architectural Components integration on Android 
👉 Using Retrofit 2 with Kotlin coroutines - ProAndroidDev