【问题标题】:Using map on Kotlin's Stateflow在 Kotlin 的 Stateflow 上使用 map
【发布时间】:2021-02-07 20:59:46
【问题描述】:

在 Viewmodel 中使用 LiveData,我们可以像这样使用 switchMap 或 Transformations.map

val recipesList = cuisineType.switchMap { repository.getDisplayRecipes(it.cuisineType).asLiveData() }

使用 StateFlow 执行此操作的最佳方法是什么?我知道我们可以像下面这样使用地图,但是这会返回我 Flow>> 这似乎不正确

val recipeListFlow = cuisineTypeStateFlow.map {
    repository.getDisplayRecipes(it.cuisineType)
}

【问题讨论】:

  • 您必须使用stateIn() 将辅助流转换为StateFlow。它们不提供返回热流的转换函数(还没有?)。

标签: android kotlin viewmodel android-livedata kotlin-stateflow


【解决方案1】:

应该是

val recipeListFlow = cuisineTypeStateFlow.flatMapLatest {
    repository.getDisplayRecipes(it.cuisineType)
}

【讨论】:

  • 如果我理解正确的话,这解决了map发出过时值的问题,但是转换后你仍然卡在冷流中?
  • 只是为了提供更多上下文,然后在我的片段类中,我想收集 recipeListFlow 中的流并使用它将列表提交给列表适配器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多