有collectAsState()适用于StateFlow属性的功能,以便在 中观察它Composable。
可组合项需要 aStateFlow因为StateFlow保证初始值。AFlow不附带该保证。
现在,如果我有一个StateFlow属性,但我想map在收集之前应用一个运算符(如 )Flow,该Composable怎么办?
这里有一个例子:
假设一个存储库公开了一个StateFlow<MyClass>
val myClassStateFlow: StateFlow<MyClass>
data class MyClass(val a: String)
...并且视图模型依赖于存储库,并且只想将属性公开a给它的Composable...
val aFlow = myClassState.Flow.map { it.a } // <- this is of type Flow<String>
运算符将map类型从 更改StateFlow<MyClass>为Flow<String>。
aFlow不再有初始值在语义上是否合理?毕竟它的第一次发射是从 的初始值导出的myClassStateFlow。- 它需要在某个时候转换
Flow回。StateFlow哪个是更惯用的地方?- 在视图模型中使用
stateIn()?代码会是什么样子? - 在可组合中使用
collectAsState(initial: MyClass)并得出一个初始值(虽然myClassStateFlow有一个初始值)?
- 在视图模型中使用