Jetpack Compose中MyApp的content未解析、@Composable调用报错如何解决
问题原因
两个报错均来自Scaffold函数的调用语法错误:
- Jetpack Compose中
Scaffold的content参数是自带@Composable注解的尾随lambda参数,你代码中Scaffold { ... }的外层大括号已经是content参数的作用域,不需要在内层额外声明content = { ... } - 你内层写的
content = { ... }是自定义的普通lambda变量,没有添加@Composable注解,因此在这个普通lambda内调用带@Composable注解的ContactContent()就会触发「@Composable调用只能发生在@Composable函数上下文」的错误,同时IDE也会提示content值未被使用(也就是你说的未解析)。
修复方案
直接修改MyApp函数中Scaffold的调用代码,去掉多余的content = 包裹层即可:
@Composable fun MyApp(navigateToProfile: (Contact) -> Unit){ Scaffold { innerPadding -> // 可选:把Scaffold返回的innerPadding传给内容布局,避免内容被顶部/底部Bar遮挡 ContactContent( navigateToProfile = navigateToProfile, modifier = Modifier.padding(innerPadding) ) } }
如果你要配置
Scaffold的topBar、bottomBar等其他参数,把这些参数写在Scaffold的小括号内,尾随大括号仍然只放content内容即可,示例:@Composable fun MyApp(navigateToProfile: (Contact) -> Unit){ Scaffold( topBar = { TopAppBar(title = { Text("联系人") }) } ) { innerPadding -> ContactContent( navigateToProfile = navigateToProfile, modifier = Modifier.padding(innerPadding) ) } }
额外验证点
如果修改后仍有报错,检查以下两点:
- 确认
ContactListItem函数也添加了@Composable注解 - 确认所有Compose依赖版本一致,避免版本不兼容导致的语法异常
内容的提问来源于stack exchange,提问作者Tomee
相关产品推荐
相关产品推荐

