@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函数的上下文中发生“这样的错误。任何人请帮助我解决这个问题。
发布于 2022-11-01 10:42:01
您的错误是因为在调用带有@Composable注释的函数时,@Composable是不可组合的(WebPageScreen) )
@Composable调用只能在@Composable函数的上下文中发生
您可以删除WebPageScreen中的WebPageScreen注释,但我不确定某些内容是否会中断(还没有尝试过在撰写中使用yet视图)。
@SuppressLint("SetJavaScriptEnabled")
@Composable // <- remove this line
fun WebPageScreen(urlToRender: String) { ... }或者您可以尝试使用这样的url mutableState,其中它的初始状态是空字符串,单击图像时,它的值将发生变化,迫使MainContent变为re-compose并调用WebPageScreen(<url>)。
@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/"
}
)
)
}
}https://stackoverflow.com/questions/74274600
复制相似问题