คุณสามารถใช้ API ที่ปลอดภัยในตัวเพื่อรักษาความปลอดภัยประเภทเวลาคอมไพล์สำหรับ
กราฟการนำทาง API เหล่านี้จะพร้อมใช้งานเมื่อแอปของคุณใช้ฟีเจอร์การนำทาง
เขียน หรือ การนำทาง Kotlin DSL โดยพร้อมให้บริการตั้งแต่วันที่ Navigation
2.8.0
API เหล่านี้เทียบเท่ากับที่ Safe Args มีให้ในกราฟการนำทาง ที่สร้างขึ้นโดยใช้ XML
กำหนดเส้นทาง
หากต้องการใช้เส้นทางที่ปลอดภัยในการพิมพ์ใน Compose ก่อนอื่นคุณต้องกำหนดเนื้อหาที่เรียงลำดับได้ คลาสหรือวัตถุที่แสดงเส้นทางของคุณ
- ออบเจ็กต์: ใช้ออบเจ็กต์สำหรับเส้นทางที่ไม่มีอาร์กิวเมนต์
- คลาส: ใช้คลาสหรือคลาสข้อมูลสำหรับเส้นทางที่มีอาร์กิวเมนต์
KClass<T>
: ใช้เมื่อไม่จำเป็นต้องส่งอาร์กิวเมนต์ เช่น คลาส ไม่มีพารามิเตอร์ หรือคลาสที่พารามิเตอร์ทั้งหมดมีค่าเริ่มต้น- ตัวอย่างเช่น
Profile::class
- ตัวอย่างเช่น
ในทั้ง 2 กรณี ออบเจ็กต์หรือคลาสต้องเป็นแบบทำให้อนุกรมได้
เช่น
// Define a home route that doesn't take any arguments
@Serializable
object Home
// Define a profile route that takes an ID
@Serializable
data class Profile(val id: String)
สร้างกราฟ
ถัดไป คุณต้องกำหนดกราฟการนำทาง ใช้composable()
เพื่อกำหนด Composable เป็นปลายทางในกราฟการนำทาง
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile.id)
}
}
สังเกตสิ่งต่อไปนี้ในตัวอย่างนี้
composable()
รับพารามิเตอร์ประเภท นั่นคือcomposable<Profile>
- การกำหนดประเภทปลายทางเป็นวิธีที่มีประสิทธิภาพมากกว่าการส่งผ่าน
route
สตริง เช่นเดียวกับcomposable("profile")
- คลาสเส้นทางจะกำหนดประเภทของอาร์กิวเมนต์การนำทางแต่ละรายการ เช่น
val id: String
ดังนั้น จึงไม่จำเป็นต้องใช้NavArgument
- สำหรับเส้นทางโปรไฟล์ เมธอดของส่วนขยาย
toRoute()
จะสร้างเมธอดProfile
ออบเจ็กต์จากNavBackStackEntry
และออบเจ็กต์ อาร์กิวเมนต์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีออกแบบกราฟโดยทั่วไป ให้ดูที่การออกแบบ หน้ากราฟการนำทาง
นำทางเพื่อพิมพ์เส้นทางที่ปลอดภัย
สุดท้าย คุณสามารถไปยัง Composable โดยใช้ navigate()
โดยการส่งผ่านในอินสแตนซ์ของเส้นทาง:
navController.navigate(Profile(id = 123))
การดำเนินการนี้จะนำผู้ใช้ไปยังปลายทาง composable<Profile>
ใน
กราฟการนำทาง ระบบสามารถหาอาร์กิวเมนต์การนำทาง เช่น id
ได้โดย
กำลังสร้าง Profile
ใหม่โดยใช้ NavBackStackEntry.toRoute
และอ่าน
พร็อพเพอร์ตี้