有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
有一个初始值)?
- 在视图模型中使用