从后台弹出另一个组件后手动(重新)触发viewmodel函数

eeq64g8w  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(348)

我有以下流程:当应用程序启动时,会显示一个包含流行项目的屏幕。用户登录后,成功登录后,将弹出backbackback,用户将带着流行项目返回屏幕。但登录时,还应显示用户最后喜欢/查看的项目。
在非组合中,我只需重新触发viewmodel中获取所有项的函数。但是在compose中,如果我试图从composable调用函数,那么我将陷入一个无休止的循环。
我的问题是-在用户成功登录返回开始屏幕后,如何重新加载项目?在这种情况下,最佳做法是什么?
视图模型

private val _itemsFlow = MutableStateFlow(emptyList())
val itemsFlow: StateFlow<List<Item>> = _itemsFlow

init {
   getItems()
}

private fun getItems() {
   viewModelScope.launch {
      itemRepository.getItems().collect { items ->
         _itemsFlow.value = items
      }
   }
}

组合的

@Composable
fun Home(viewModel: HomeViewModel = hiltViewModel()) {
   val items by viewModel.itemsFlow.collectAsState()
   ...
   // used later in a LazyRow
}
7lrncoxx

7lrncoxx1#

看看副作用
在您的情况下,这样做会有所帮助:

LaunchedEffect(Unit) {
    viewModel.getItems()
}

相关问题