Android Compose 开发 界面间的跳转(Router)
1.添加库
//project build.gradle.kts pluginskotlin("plugin.serialization") version "2.1.0"//app build.gradle.kts pluginskotlin("plugin.serialization")//app build.gradle.kts dependenciesimplementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0")
2.创建Router
@Serializable
sealed class Route {@Serializabledata object Splash: Route()@Serializabledata object Dashboard:Route()@Serializabledata class Product(val categoryId:Int, val title: String):Route()@Serializabledata class Detail(val id:Int): Route()@Serializabledata object Cart:Route()
}
3.创建@Composable App(),定义跳转位置
@Composable
fun App(modifier: Modifier = Modifier) {val navController = rememberNavController()NavHost(navController = navController,startDestination = Route.Splash) {//欢迎屏幕使用的跳转composable<Route.Splash> {SplashScreen {navController.navigate(it) {popUpTo<Route.Splash> {inclusive = true}launchSingleTop = true}}}composable<Route.Dashboard> {DashboardScreen(navigateToRoute = {navController.navigate(it)})}composable<Route.Product> {ProductScreen(params = it.toRoute(),onBackPress = {navController.navigateUp()},navigateToRoute = {navController.navigate(it)})}composable<Route.Detail> {DetailScreen(upPress = {navController.navigateUp()},param = it.toRoute(),navigateToRout = {navController.navigate(it)})}composable<Route.Cart> {CartScreen(upPress = {navController.navigateUp()})}}
}
4.各窗口的定义
@Composable
fun SplashScreen(modifier: Modifier = Modifier,navigatToRouter:(Route)-> Unit) {}@Composable
fun DetailScreen(modifier: Modifier = Modifier,isPreview: Boolean = false,param: Route.Detail,upPress:()->Unit,navigateToRout:(Route)->Unit
) {}@Composable
fun DashboardScreen(isPreview: Boolean = false,navigateToRoute:(Route)->Unit,) {}@Composable
fun CartScreen(modifier: Modifier = Modifier,isPreview: Boolean = false,upPress:()->Unit
) {}@Composable
fun ProductScreen(modifier: Modifier = Modifier,params: Route.Product,isPreview: Boolean = false,onBackPress:()->Unit,navigateToRoute:(Route)-> Unit
) {