Kotlin 通过compose desktop';通过callbackflow来点击?
我想知道是否有可能像我在这篇文章中看到的那样,通过Kotlin 通过compose desktop';通过callbackflow来点击?,kotlin,android-jetpack-compose,flow,Kotlin,Android Jetpack Compose,Flow,我想知道是否有可能像我在这篇文章中看到的那样,通过callbackFlow传递onClik[处理onClick]。 我很难实现,因为onClick回调也在参数内按钮是函数,所以无法实现扩展函数 不管怎样,我试过类似的东西 lateinit变量buttonListener:流 趣味活动(t:t)=电话回流{ 报价(t) 等待关闭{null} } 协同观测(IO).发射{ 如果(::buttonListener.Itinitialized){ buttonListener.collect{ pri
callbackFlow
传递onClik
[处理onClick
]。
我很难实现,因为onClick回调
也在参数内按钮
是函数,所以无法实现扩展函数
不管怎样,我试过类似的东西
lateinit变量buttonListener:流
趣味活动(t:t)=电话回流{
报价(t)
等待关闭{null}
}
协同观测(IO).发射{
如果(::buttonListener.Itinitialized){
buttonListener.collect{
println(“it=>Kotlin.Unit”)
}
}
}
材料学{
钮扣(
onClick={
println(“按钮勾选”)
buttonListener=报价(单位)
} //...
){/**设计*/}
}
在每个运行时只能调用1次
buttonClicked <--\
Kotlin.Unit => Kotlin.Unit <--/\__first click
buttonClicked
buttonClicked
buttonClicked
您可以使用协程
通道
而不是流
来接收来自协程外部的事件。然后使用consumerasflow()
方法将其转换为Flow
现在可以在此flow
上调用流操作符,如collect
它可以从composable按钮接收多个onClick
事件
var buttonListener = Channel<Unit>()
CoroutineScope(Dispatchers.IO).launch {
buttonListener.consumeAsFlow().collect {
Log.d(TAG, "onCreate: $it => Kotlin.Unit")
}
}
MaterialTheme {
Button(
onClick = {
Log.d(TAG, "onCreate: buttonClicked")
buttonListener.offer(Unit)
}
){
Text(text = "Button")
}
}
var buttonListener=Channel()
协同路由示波器(Dispatchers.IO)。启动{
buttonListener.consumeAsFlow().collect{
Log.d(标记“onCreate:$it=>Kotlin.Unit”)
}
}
材料学{
钮扣(
onClick={
Log.d(标记“onCreate:buttonClicked”)
日分
var buttonListener = Channel<Unit>()
CoroutineScope(Dispatchers.IO).launch {
buttonListener.consumeAsFlow().collect {
Log.d(TAG, "onCreate: $it => Kotlin.Unit")
}
}
MaterialTheme {
Button(
onClick = {
Log.d(TAG, "onCreate: buttonClicked")
buttonListener.offer(Unit)
}
){
Text(text = "Button")
}
}