所以让我们想象一下我正在使用可组合项中的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*/})
}
我真的不知道如何实现这一点,所以非常感谢任何帮助。
您可以复制
collectAsState
的实现,它在底层使用 produceState
,并添加 .onCompletion
回调:
val state by produceState(
initialValue = myViewModel.myStateFlow.value,
key1 = myViewModel.myStateFlow
) {
myViewModel.myStateFlow
.onCompletion { /* Your action */ }
.collect { value = it }
}