Compose-Navigation带参传递

带参传递

目前 compose 还不支持传入对象作为参数!


简单双参数

根目录下新建文件夹 entity,新建单例类 ContentType 作为数据类存储位置

新增数据类 DemoContent,这表示我们需要传入的两个参数,后面带问号判空

object ContentType {
    data class DemoContent(
        val id: Int?,
        val content: String?
    )
}

本案例承接上一节案例;

修改 demo1,将其改写成类的形式,body 方法内容保持不变

class Demo1(
    var navController: NavController,
    // 接收数据类
    var content: ContentType.DemoContent
) {
    @Composable
    fun init() {
        body()
    }

    @Composable
    private fun body() {
        ...
    }
}

修改 mainnav 中的 demo1 路由

定义参数的三个步骤:

  1. 路由路径内使用花括号包裹参数名称(类似于 springboot)
  2. 必须为所有参数给予一个 NavType!!!
  3. 将参数传递给指定 composable 组件
composable(
    // path中指定了两个参数,前者为int类型,后者为string类型
    "${RouteConfig.ROUTE_DEMO1}/{id}/{content}",
    // 使用列表注册所有的参数并且添加对应类型
    arguments = listOf(
        navArgument("id") { type = NavType.IntType },
        navArgument("content") { type = NavType.StringType }
    )
) { navBackStackEntry ->

    // navBackStackEntry保存传入的参数,我们通过其获取值并传递
    Demo1(
        navController, ContentType.DemoContent(
            navBackStackEntry.arguments?.getInt("id"),
            navBackStackEntry.arguments?.getString("content")
        )
    ).init()
}

demo2 启动参数修改

非常简单,仅需要使用 ${} 的形式填充入 path 即可传递值

Button(onClick = {
    navController.navigate("${RouteConfig.ROUTE_DEMO1}/${1}/${"damn"}")
}) {
    ...
}

默认参数

给路由配置 defaultValue 默认值,可以提升效率

composable(
    "${RouteConfig.ROUTE_DEMO1}/{id}?content={content}",
    arguments = listOf(
        navArgument("id") { type = NavType.IntType },

        // 设置默认值
        navArgument("content") {
            type = NavType.StringType
            defaultValue = "nullptr"
        }
    )
) { navBackStackEntry ->
    ...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhillery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值