错误:@Composable 调用只能在 @Composable 函数的上下文中发生

问题描述 投票:0回答:2

想要在 onClick 中启动 TimerView() - TimerView 是一个文本可组合项 但出现上述错误 - 两者都被标记为可组合项

Composable
fun LosB(BLY: String, YArray: ArrayList<String> /* = java.util.ArrayList<kotlin.String> */) {
    //  val Tit = mutableStateOf("sdfsdf")
    val context = LocalContext.current
    Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        modifier = Modifier.fillMaxWidth()
    ) {


        OutlinedButton(
            onClick = { TimerView()},
            shape = CircleShape,
            border = BorderStroke(1.dp, Color(0xFFADFF2F)),
            colors = ButtonDefaults.buttonColors(
                backgroundColor = Color(0xFF1C536F),
                contentColor = Color.White
            )
        ) {


            Text(text = "OK", fontSize = 20.sp)

        }
    }

有什么帮助吗?想要显示 txt 计数器 -

android-jetpack-compose android-context
2个回答
4
投票

你只需要像这样创建一个 mutableState

var timeViewState by remember {
    mutableStateOf(false)
}

if(timeViewState) {
   TimerView()
}

OutlinedButton(
   onClick = { timeViewState = true },
...

首页我帮你


3
投票

@Compose
注释的作用类似于 Kotlin 中的 suspend 关键字,它正在改变函数的类型。可组合函数类型就像
suspend
与常规函数类型不兼容一样。

编译器以不同的方式对待该类型的函数,它向其插入

$composer
参数,并使用生成的整数键调用其
start
方法。

fun TimerView($composer: Composer) {
    $composer.start(123) 
}

composer
对象从父可组合项传递给可组合项,但由于
onClick
不可组合并且发生在组合上下文之外,因此其中没有有效的作曲家。所以如果没有
composer

就无法调用可组合项

作曲,作曲,作曲……

关于它的好文章是这里

© www.soinside.com 2019 - 2024. All rights reserved.