Kotlin compose,在 StateFlow 上执行collectAsState 时如何在收集完成后执行操作

问题描述 投票:0回答:1

所以让我们想象一下我正在使用可组合项中的collectAsState 收集状态流:

@Composable
internal fun Test(
    myViewModel: MyViewModel = viewModel()
) {
    val state by myViewModel.myStateFlow.collectAsState()
}

现在我想在我的可组合项不再收集状态时执行操作。

请注意,这已经简化了很多。在真实的示例中,我无法使用该触发器的可组合项的处置。本质上我想要的是这样的:

@Composable
internal fun Test(
    myViewModel: MyViewModel = viewModel()
) {
    val state by myViewModel.myStateFlow.collectAsState(onFinish: () {/*someaction*/})
}

我真的不知道如何实现这一点,所以非常感谢任何帮助。

android kotlin android-jetpack-compose kotlin-coroutines kotlin-flow
1个回答
0
投票

您可以复制

collectAsState
的实现,它在底层使用
produceState
,并添加
.onCompletion
回调:

val state by produceState(
  initialValue = myViewModel.myStateFlow.value,
  key1 = myViewModel.myStateFlow
) {
  myViewModel.myStateFlow
    .onCompletion { /* Your action */ }
    .collect { value = it }
}
© www.soinside.com 2019 - 2024. All rights reserved.