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

如何在Jetpack Compose Navigation中用PreviewParameter预览带NavController的界面

解决方案

问题根因

你当前预览无内容的核心原因是自定义的FakeNavController作为PreviewParameterProvider,其values属性返回了空序列,预览环境无法获取到可用的NavController实例。

推荐实现方案

方案1:直接用官方提供的rememberNavController生成预览实例(最简方案)

不需要自定义PreviewParameterProvider,直接在预览函数中生成无实际跳转能力的测试用NavController即可满足绝大多数界面预览需求:

@Preview
@Composable
fun HomeViewPreview() {
    // 预览环境下生成默认空实现的NavController实例
    val fakeNavController = rememberNavController()
    HomeView(fakeNavController)
}

方案2:自定义PreviewParameterProvider实现(适用于多状态批量预览场景)

如果你需要传递多个自定义配置的NavController实例做多状态预览,可以按以下方式实现Provider:

class FakeNavControllerProvider : PreviewParameterProvider<NavController> {
    override val values = sequenceOf(
        NavHostController(LocalContext.current).apply {
            // 可选配置:指定当前目的地、参数,模拟特定页面的导航状态
            setBackStackEntry(
                NavBackStackEntry.create(
                    context = LocalContext.current,
                    destination = NavDestination("home").apply { id = R.id.home },
                    arguments = null
                )
            )
        }
    )
}

@Preview
@Composable
fun Preview(
    @PreviewParameter(FakeNavControllerProvider::class) fakeNavController: NavController
) {
    HomeView(fakeNavController)
}

补充注意事项

  • 若需要预览中模拟跳转交互,可以使用MockK等Mock框架构造NavController实例,Mock对应的navigate方法即可
  • 不要在预览中注入业务逻辑使用的真实NavController,避免预览触发实际页面跳转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:36:07