首页 > 解决方案 > 可以将流从一个可组合传递到另一个吗?

问题描述

我有一个显示事件流的视图模型。我将该 viewModel 注入到顶级可组合中,但我想将事件发送到另一个可组合(在顶级可组合内)。像这样的东西:

@Composable
fun MainScreen(viewModel: MyViewModel) {
    SomeComponent(viewModel.events) 
    // Other Stuff   
}

@Composable
fun SomeComponent(events: Flow<MyEvent>) { // MyEvent is a sealed class
    LaunchedEffect(Unit) {
        events.collect {
            // Process the events
        }
    }
    // Other stuff
}

我收集SomeComponent而不是收集流量的原因MainScreen是因为我需要访问某些内部状态SomeComponent(实际上是 ScaffoldState)来处理事件。

我在我的应用程序中编写了这段代码,一切似乎都正常,但我不确定这是否是一件好事。
我的问题是:
我错过了这种方法有什么缺点吗?这里可能出了什么问题?

标签: androidkotlinandroid-jetpack-compose

解决方案


将流作为参数传递很好。流没有什么特别之处。它只是另一个数据源,就像其他任何东西一样。如果你没有把它传入,你将不得不想出一些其他的方法来访问它,这可能会导致打破 Composables 应该遵守的单向流模式。


推荐阅读