gpt4 book ai didi

android - 如何在可组合函数回调中调用 Kotlin 协程?

转载 作者:行者123 更新时间:2023-12-02 13:16:17 24 4
gpt4 key购买 nike

我想在可组合函数的回调中调用挂起函数。

suspend fun getLocation(): Location? { /* ... */ }

@Composable
fun F() {

val (location, setLocation) = remember { mutableStateOf<Location?>(null) }

val getLocationOnClick: () -> Unit = {
/* setLocation __MAGIC__ getLocation */
}

Button(onClick = getLocationOnClick) {
Text("detectLocation")
}

}
如果我会使用 Rx,那么我可以 subscribe .
我可以做 invokeOnCompletion然后 getCompleted ,但该 API 是实验性的。
我无法使用 launchInCompositiongetLocationOnClick因为 launchInComposition@ComposablegetLocationOnClick不能是 @Composable .
@Composable 内的常规函数​​中获得挂起函数结果的最佳方法是什么?功能?

最佳答案

创建一个与可组合的生命周期相关联的协程范围,并使用该范围来调用您的挂起函数

suspend fun getLocation(): Location? { /* ... */ }

@Composable
fun F() {
// Returns a scope that's cancelled when F is removed from composition
val coroutineScope = rememberCoroutineScope()

val (location, setLocation) = remember { mutableStateOf<Location?>(null) }

val getLocationOnClick: () -> Unit = {
coroutineScope.launch {
val location = getLocation()
}
}

Button(onClick = getLocationOnClick) {
Text("detectLocation")
}
}

关于android - 如何在可组合函数回调中调用 Kotlin 协程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64116377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com