👻
Flowの値が変わったらRequestを投げる
DataBindingでStateFlowが使えるようになり今後需要が増えそうなので、
試してみました。
想定した状況
switchなどの切り替えで一覧の表示内容を変更する。
Repository
class GithubRepository(private val service: GithubService) {
fun getRepo(user: String) =
flow { emit(service.listRepos(user)) }.flowOn(Dispatchers.IO)
}
ユーザ名の文字列を受け取ったらリクエストを投げて一覧データを取得します。
ViewModel
class MainViewModel(private val repository: GithubRepository) : ViewModel() {
val _user = MutableStateFlow("")
private val user: Flow<String> = _user
private val resFlow = user.flatMapLatest {
repository.getRepo(it)
}
init {
viewModelScope.launch {
resFlow.collect { res ->
if (res.isSuccessful) {
res.body()?.forEach {
println(it.name)
}
}
}
}
}
}
_user
のStateFlowに画面で設定された文字をセットします。
ここが想定環境に書いたswitchなどの条件を設定する物です。
resFlow
が一覧取得リクエストのFlowになります。
user.flatMapLatest
ここで_userに設定された値が変更されたら一覧取得のリクエストを投げるようにしています。
今回はDataBindingでの連携をしていませんが、
凄い幸せになれそうな気がしています。
サンプルプロジェクト
Discussion