首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Composable调用只能在@Composable函数-Jetpack的上下文中发生

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

Stack Overflow用户
提问于 2022-11-01 10:36:18
回答 1查看 79关注 0票数 0
代码语言:javascript
复制
@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebPageScreen(urlToRender: String) {
    AndroidView(factory = {
        WebView(it).apply {
            layoutParams = ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
            )
            webViewClient = WebViewClient()
            loadUrl(urlToRender)
        }
    }, update = {
        it.loadUrl(urlToRender)
    })
}


@Composable
fun MainContent() {
    val context = LocalContext.current

    Column(
        modifier = Modifier
            .fillMaxSize()
            .background(Color(0xFFFEFEFA))
            .padding(16.dp),
        verticalArrangement = Arrangement.spacedBy(32.dp),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {

        Image(
            painter = painterResource(id = R.drawable.link), contentDescription = "Localized description", contentScale = ContentScale.Crop, modifier = Modifier
                .fillMaxWidth()
                .height(150.dp)
                .clickable(enabled = true, onClickLabel = "Clickable image",
                    onClick = {
                        
                        WebPageScreen("https://www.google.co.in/")

                    }
                )
        )

    }
}

这是我的代码,当我单击图像时,我想实现webview,我得到了类似于"@Composable调用只能从@Composable函数的上下文中发生“这样的错误。任何人请帮助我解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2022-11-01 10:42:01

您的错误是因为在调用带有@Composable注释的函数时,@Composable是不可组合的(WebPageScreen) )

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

您可以删除WebPageScreen中的WebPageScreen注释,但我不确定某些内容是否会中断(还没有尝试过在撰写中使用yet视图)。

代码语言:javascript
复制
@SuppressLint("SetJavaScriptEnabled")
@Composable // <- remove this line
fun WebPageScreen(urlToRender: String) { ... }

或者您可以尝试使用这样的url mutableState,其中它的初始状态是空字符串,单击图像时,它的值将发生变化,迫使MainContent变为re-compose并调用WebPageScreen(<url>)

代码语言:javascript
复制
@Composable
fun MainContent() {
    
    ...
    
    var url by remember {
        mutableStateOf("")
    }

    // at first composition pass this will be ignored
    if (url.isNotBlank()) {
        WebPageScreen(url)
    }

    Column(
       ...
    ) {

        Image(
            ...
            ...
            .clickable(enabled = true, onClickLabel = "Clickable image",
                    onClick = {
                        // setting a value to this will trigger re-composition of MainContent, satisfying your if condition above
                        url = "https://www.google.co.in/"
                    }
                )
        )
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74274600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档