汉川建设局网站宁波百度seo点击软件
带参传递
目前 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
) {@Composablefun init() {body()}@Composableprivate fun body() {...}
}
修改 mainnav 中的 demo1 路由
定义参数的三个步骤:
- 路由路径内使用花括号包裹参数名称(类似于 springboot)
- 必须为所有参数给予一个 NavType!!!
- 将参数传递给指定 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.StringTypedefaultValue = "nullptr"})
) { navBackStackEntry ->...
}