如何在 Jetpack Compose 中使用 SharedFlow

How to use SharedFlow in Jetpack Compose

我可以使用状态流

val items by myViewModel.items.collectAsState()

我想共享流不能这样使用。共享流程是否适用于 Compose?

从技术上讲,您可以像任何其他状态一样收集它 Flow - 初始值:

flow.collectAsState(initial = 0)

此状态将具有流在呈现视图期间发出的最后一个值,或初始值。不过,我不确定这是否有意义。

但您也可以使用它来传递需要 one-time 响应的事件,如 所示。

SharedFlow 应用于one-shot 事件(导航、toast 等...)。

所以这是收集SharedFlow的方法:

@Composable
fun <T> Flow<T>.collectAsEffect(
    context: CoroutineContext = EmptyCoroutineContext,
    block: (T) -> Unit
) {
    LaunchedEffect(key1 = Unit) {
        onEach(block).flowOn(context).launchIn(this)
    }
}