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

Jua*_*los 6 kotlin androidx android-jetpack-compose

我是 的新手Jetpack Compose,我正在尝试在按钮内实现一个功能,但它给出了以下错误:

\n
\n

@Composable 调用只能在 mContext.startActivity(Intent(mContext,\nMainScreen()::class.java)) 中的\n@Composable 函数的上下文中发生

\n
\n
        @Composable\n         fun AdminAuth() {\n        Column(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(20.dp),\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = Arrangement.Center\n        ) {\n            var password by rememberSaveable { mutableStateOf("") }\n            var passawordVisibility by remember { mutableStateOf(false) }\n            \n            val icon = if (passawordVisibility)\n                painterResource(id = R.drawable.ic_visibility)\n            else\n                painterResource(id = R.drawable.ic_visibility_off)\n            Text(text = "Insira a senha do usu\xc3\xa1rio Master:", fontSize = 15.sp)\n            OutlinedTextField(\n                value = password, \n                onValueChange = {\n                    password = it\n                },\n                placeholder = { Text(text = "Senha") },\n                label = { Text(text = "Senha") },\n                trailingIcon = {\n                    IconButton(onClick = {\n                        passawordVisibility = !passawordVisibility\n                    }) {\n                        Icon(\n                            painter = icon,\n                            contentDescription = "\xc3\x8dcone de visibilidade"\n                        )\n                    }\n                },\n                keyboardOptions = KeyboardOptions(\n                    keyboardType = KeyboardType.Password\n                ),\n                visualTransformation = if (passawordVisibility)\n                VisualTransformation.None\n                else PasswordVisualTransformation()\n            )\n    \n            val mContext = LocalContext.current\n            OutlinedButton(\n                onClick = {\n                    if (password.equals("Abac@xi123")) {\n                        mContext.startActivity(Intent(mContext, MainScreen()::class.java))\n                    }\n                },\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(35.dp),\n            ) {\n                Text(text = "Entrar")\n            }\n            \n        }\n    }\n    \n    @Composable\n    @Preview\n    fun AdminAuthPreview() {\n        Column(\n            modifier = Modifier\n                .fillMaxSize()\n                .background(Color.White),\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = Arrangement.Center\n        ) {\n            AdminAuth()\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

z.g*_*g.y 0

startActivity调用inside没有什么问题onClick,但是你应该调用MainScreen's构造函数(假设它是一个Activity),你可以简单地删除括号就可以了。

onClick = {
   if (password.equals("Abac@xi123")) {
            mContext.startActivity(Intent(mContext, MainScreen::class.java))
   }
}
Run Code Online (Sandbox Code Playgroud)

但我怀疑MainScreen这只是另一个@Composable屏幕,而不是Activity您想要导航到的屏幕,并且您遇到了该错误,因为

不能在不可组合函数中调用可组合函数

就像您看到的编译错误一样。

我建议进一步阅读,尤其是观看实时编码,您将亲眼目睹如何从可组合屏幕导航到另一个屏幕。

官方文档

一些相关帖子

Philipp Lackner 的笔记应用程序