我有一个对象,希望从过滤的冷StateFlow中创建热SharedFlow对象。其意图是SharedFlow是数据更改的事件通道,但可以检索所有数据以获取当前状态。这意味着对于给定的字段,我可以找到当前状态,然后监视SharedFlow以获得状态更改。
我想提供一个API,以如下方式将SharedFlow转换为StateFlow:
var myVariable = DEFAULT_VALUE
val mySharedFlow = MutableSharedFlow<Int>()
val myStateFlow = mySharedFlow
.filter { it < 42 }
.asStateFlow(myVariable)// <- Convert to a StateFlow given a default value这显然是一个过于简化的例子,但我的情况更复杂,目前我必须在字段更改时调用函数,但目前我执行以下操作:
myObj.onChange.collect(handler)
handler(myObj.getCurrentValue)
fun handler(data: Int) {
// Handle data change
}但是,我更喜欢使用并消除对第二个函数调用的需求。特别是因为这类代码的许多使用者都是小部分代码(大多数只是一个表达式),它们不需要在自己的函数上下文中,而应该只是简单的lambdas。
发布于 2022-01-12 16:49:50
Tenfour04 answered my question in his comment。我需要的函数称为stateIn()。
https://stackoverflow.com/questions/70672434
复制相似问题