使用 PreviewParameter NavController 在 android jetpack 中预览“屏幕”组合导航

dav*_*LEZ 14 kotlin android-jetpack-navigation android-jetpack-compose

我正在发现 android Jetpack Compose(和导航)并尝试使用 as 参数显示视图的预览navController

为了实现这一点,我使用了PreviewParameter并且没有错误,但预览窗口中没有显示任何内容。

有谁知道如何将假NavController实例传递给可组合项?

class FakeNavController : PreviewParameterProvider<NavController> {
    override val values: Sequence<NavController>
        get() {}
}

@Preview
@Composable
fun Preview(
    @PreviewParameter(FakeNavController::class) fakeNavController: NavController
) {
    HomeView(fakeNavController)
}
Run Code Online (Sandbox Code Playgroud)

Ali*_*ami 37

您不必将其设置为可为空并将 null 传递给它。你只需要通过这个:rememberNavController()

@Preview
@Composable
fun Preview() {
    HomeView(rememberNavController())
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*hov 5

PreviewParameter用于使用不同数据创建同一视图的多个预览。您应该从 中返回所需的值values。在您的示例中,您没有返回任何内容,这就是它不起作用的原因(在我的情况下它甚至没有构建)。

这不会帮助您模拟导航控制器,因为您仍然需要以某种方式创建它才能从values. 我认为这是不可能的。

相反,您可以传递一个处理程序,在这种情况下您不需要模拟它:

@Composable
fun HomeView(openOtherScreen: () -> Unit) {
    
}
// your Navigation view
composable(Destinations.Home) { from ->
    HomeView(
        openOtherScreen = {
            navController.navigate(Destinations.Other)
        },
    )
}
Run Code Online (Sandbox Code Playgroud)