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")
    }
}