使用状态流,我可以:
val items by myViewModel.items.collectAsState()
我认为共享流无法以这种方式使用。 共享流是否适用于Compose?
使用状态流,我可以:
val items by myViewModel.items.collectAsState()
我认为共享流无法以这种方式使用。 共享流是否适用于Compose?
SharedFlow 应该用于一次性事件(如导航、提示等)。
所以这是收集 SharedFlow 的方法:
@Composable
fun <T> Flow<T>.collectAsEffect(
context: CoroutineContext = EmptyCoroutineContext,
block: (T) -> Unit
) {
LaunchedEffect(key1 = Unit) {
onEach(block).flowOn(context).launchIn(this)
}
}
从技术上讲,您可以像收集任何其他的Flow
一样将其作为状态收集-具有初始值:
flow.collectAsState(initial = 0)
这个状态将拥有在视图呈现期间流所发出的最后一个值,或者是初始值。虽然我不确定这是否有太多意义。
但是你也可以将其用作传递需要一次性响应的事件的方式,如此答案所示。