【问题标题】:Is it ok to pass a Flow from one composable to another?可以将流从一个可组合传递到另一个吗?
【发布时间】:2021-11-09 13:21:24
【问题描述】:

我有一个展示事件流的视图模型。我将该 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)来处理事件。

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

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

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

    【讨论】:

    • 好的,明白了。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多