You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JetPack Compose点击LazyColumn项跳转至详情视图的实现问题

报错核心原理

所有带@Composable注解的函数都有特殊的上下文要求,只能在同样被@Composable标记的函数作用域内调用。普通回调(比如点击事件回调、未加@Composable注解的自定义lambda参数)都不属于合法的Composable调用上下文,在这些位置调用Composable函数就会触发你遇到的错误。

问题排查与解决

你目前贴出的导航逻辑本身是符合规范的,错误大概率出自以下两个位置:

1. JetFirestore组件的内容回调未声明为Composable类型

你把LazyColumn、加载动画等Composable内容写在了JetFirestore的末尾trailing lambda参数中,如果JetFirestore对这个参数的定义没有添加@Composable注解,这个lambda的上下文就不允许调用任何Composable函数,直接触发报错。
解决方法:找到JetFirestore的声明,给末尾的内容lambda参数加@Composable注解:

// 错误的参数声明示例
fun JetFirestore(
    // 其他参数省略
    content: () -> Unit // 未加@Composable
)

// 正确的参数声明
fun JetFirestore(
    // 其他参数省略
    @Composable content: () -> Unit // 加上@Composable注解
)

同时要确保JetFirestore内部调用content的位置本身也处于Composable上下文内。

2. 错误地在点击回调中直接调用Profile页面

如果你之前试过在Modifier.clickable的回调里直接写Profile(autor.nombre)来跳转页面,也会触发报错。点击事件回调是普通非Composable上下文,不能直接实例化页面Composable。你当前通过navigateToProfile回调调用navController.navigate的逻辑是正确的,不需要修改,路由跳转统一由NavHost在自身的Composable上下文里处理目标页面的实例化即可。

额外注意项
  • 确认Profile组件本身已经添加@Composable注解
  • 如果autor.nombre包含斜杠、空格等特殊字符,拼接路由时先用Uri.encode编码,获取参数时再用Uri.decode解码,避免路由匹配失败
  • 确保Profile.route的定义不包含斜杠,避免路由拼接出现格式错误

内容的提问来源于stack exchange,提问作者Komito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:45:02