【已解决】 如何在非Composable中调用Composable函数?
如题,
Functions which invoke @Composable functions must be marked with the @Composable annotation
class NetWorkReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
....... 代码略
DialogCustom()
}
}
@Composable
fun DialogCustom() {
.........代码略
}
如你问题中所描述的:Functions which invoke @Composable functions must be marked with the @Composable annotation.(调用@Composable 函数的函数必须用@Composable 注释标记。) 这点和 Kotlin 协程一致,都是通过编译器在编译阶段将该函数的类型修改掉了(在函数入参处添加了参数)。Kotlin 的挂起函数是通过 suspend 关键字来的,同理,在 Compose 中是通过 @Composable 注解来的,你的普通函数是没有这个参数的,所以导致你无法在“非Composable中调用Composable函数”。 如果你想调用的话,可以了解一下 “androidx.compose.ui.platform.ComposeView”。 官方链接:https://developer.android.google.cn/jetpack/compose/interop/adding?hl=zh-cn
这个可能要重写规则代码。