navigationevent
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
13 สิงหาคม 2025 | - | - | - | 1.0.0-alpha06 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน NavigationEvent คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงใน โปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูลของคุณ
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha06" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha06") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
ไม่มีบันทึกประจำรุ่นสำหรับอาร์ติแฟกต์นี้
รุ่น 1.0
เวอร์ชัน 1.0.0-alpha06
13 สิงหาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha06
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha06 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
Passive Listeners API
ตอนนี้คุณสามารถส่งข้อมูลบริบทที่กำหนดเองจากโฮสต์การนำทางใดก็ได้ และรับฟังแบบพาสซีฟการเปลี่ยนแปลงสถานะท่าทางสัมผัสจากที่ใดก็ได้ใน UI ซึ่งจะเปิดใช้ภาพเคลื่อนไหวที่รับรู้บริบทสำหรับการย้อนกลับแบบคาดเดาและการนำทางอื่นๆ ที่ขับเคลื่อนด้วยท่าทางสัมผัส
ฟีเจอร์นี้มี 2 ส่วน ได้แก่
- การระบุข้อมูล - ใช้
NavigationEventInfo
เพื่อส่งข้อมูลที่กำหนดเอง - สถานะการใช้งาน - ใช้
dispatcher.state
(NavigationEventState
) เพื่อสังเกตความคืบหน้าและบริบทของท่าทางสัมผัส
NavigationEventCallback
ตอนนี้ได้เปิดเผยเมธอดsetInfo(currentInfo, previousInfo)
เพื่อตั้งค่าบริบทท่าทางสัมผัสในการเรียกครั้งเดียว (I1d5e7, b/424470518)NavigationEventHandler
เพิ่มการโอเวอร์โหลดใหม่ที่ยอมรับcurrentInfo
และpreviousInfo
ซึ่งทําให้เป็น API หลักสําหรับการระบุบริบทในแอป Compose (I6ecd3, b/424470518)
ตัวอย่าง
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
NavigationEventDispatcher
ตอนนี้แสดงdispatcher.state
และdispatcher.getState<T>()
(If7fae, Ia90ca, b/424470518) แล้ว API ที่อิงตามStateFlow
เหล่านี้ช่วยให้ UI ใดก็ตามสังเกตความคืบหน้าของท่าทางสัมผัสและข้อมูลตามบริบทได้โดยไม่ต้องจัดการเหตุการณ์โดยตรง
ตัวอย่าง
val gestureState by LocalNavigationEventDispatcherOwner.current!!
.navigationEventDispatcher
.state
.collectAsState()
val progress = gestureState.progress // Returns latestEvent.progress or 0F
when (val state = gestureState) {
is InProgress -> {
val toScreen = state.currentInfo as MyScreenInfo
val fromScreen = state.previousInfo as MyScreenInfo
println("Navigating from ${fromScreen.screenName} to ${toScreen.screenName}")
}
is Idle -> { /* Idle state */ }
}
เพิ่มพร็อพเพอร์ตี้
progress
ลงในNavigationEventState
(I7b196) ที่แสดงผลlatestEvent.progress
เมื่อดำเนินการ หรือ0F
ในกรณีอื่นๆval progress = state.progress
เพิ่ม
NavigationEventDispatcherOwner
composable เพื่อสร้าง ลิงก์ และทิ้งอินสแตนซ์NavigationEventDispatcher
ตามลำดับชั้น เปิดใช้การควบคุมแบบไดนามิกของสถานะที่เปิดใช้ของ Dispatcher และการล้างข้อมูลอัตโนมัติ@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
การเปลี่ยนแปลง API
- พารามิเตอร์
isPassthrough
ถูกนำออกจากNavigationEventCallback
แล้ว (I99028, b/424470518) - ตอนนี้ตัวสร้าง
NavigationEventState
เป็นแบบภายในแล้ว สำหรับการทดสอบ ให้อัปเดตสถานะ (ค่าเริ่มต้นคือIdle
) ผ่านDirectNavigationEventInputHandler
เรียกใช้handleOnStarted
หรือhandleOnProgressed
เพื่อตั้งค่าสถานะเป็นInProgress
และhandleOnCompleted
หรือhandleOnCancelled
เพื่อเปลี่ยนกลับเป็นIdle
หากต้องการอัปเดตNavigationEventInfo
ให้ใช้NavigationEventCallback.setInfo
(I93dca, b/424470518) - เพิ่มพารามิเตอร์เริ่มต้นลงใน
NavigationEvent
เพื่อให้การเริ่มต้นใช้งานง่ายขึ้นและลดความซับซ้อนของการทดสอบ ซึ่งควรใช้แทนTestNavigationEvent
(I5dc49, I232f4) - เพิ่ม
TestNavigationEventCallback
สำหรับทดสอบเหตุการณ์การนำทางที่มีสถานะปัจจุบัน/ก่อนหน้าเฉพาะ (Idd22e, b/424470518) NavigationEventInputHandler
ได้รับการเปลี่ยนให้เป็นคลาสแบบนามธรรมเพื่อแทนที่AbstractNavigationEventInputHandler
ก่อนหน้าด้วยการติดตั้งใช้งานในDirectNavigationEventInputHandler
(Iadde5, Ifed40I3897c, b/432616296, b/435416924)- ฟังก์ชัน
send*
ในNavigationEventInputHandler
มีการเปลี่ยนชื่อคำนำหน้าเป็นhandle*
(Iffcaf) - ตอนนี้
OnBackInvokedInputHandler
ได้ขยายเวลาabstract
NavigationInputHandler
ที่เพิ่งเปิดตัว (Ib45aa) - เปลี่ยน
NavigationEventDispatcherOwner
ให้ต้องมี Dispatcher หลักที่คุณต้องส่งnull
อย่างชัดเจนเพื่อสร้าง Dispatcher รูท (Ia6f64, b/431534103)
การแก้ไขข้อบกพร่อง
- เพิ่มประสิทธิภาพด้วยการหลีกเลี่ยงการคัดลอกคอลเล็กชันใน
NavigationEventDispatcher.dispose()
(I4ab09) - แก้ไขปัญหาที่
NavigationEventHandler
ไม่ตอบสนองต่อการเปลี่ยนแปลงสถานะที่เปิดใช้อย่างถูกต้อง (Ia5268,I19bec, I5be5c, b/431534103)
ข้อมูลอัปเดตเกี่ยวกับเอกสาร
- KDocs สำหรับ
NavigationEvent
ได้รับการขยายความเพื่อชี้แจงบทบาทในฐานะเครื่องมือรวมเหตุการณ์และลักษณะการทำงานของพร็อพเพอร์ตี้รายละเอียดในประเภทการนำทางต่างๆ (ท่าทางสัมผัส การคลิก) (I91e8d) - อัปเดตเอกสารประกอบสำหรับ Compose API ของการจัดการการกลับของระบบ (
BackHandler
,PredictiveBackHandler
,NavigationEventHandler
) เพื่อเรียกใช้ลักษณะการทำงานโดยเฉพาะเกี่ยวกับลำดับการเรียกกลับ (I7ab94, )
การอัปเดตการขึ้นต่อกัน
NavigationEvent
ตอนนี้ขึ้นอยู่กับ Compose Runtime 1.9.0-beta03 ซึ่งช่วยให้ชิ้นงานnavigationevent-compose
รองรับเป้าหมาย KMP ทั้งหมดได้ (Ia1b87)
เวอร์ชัน 1.0.0-alpha05
30 กรกฎาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha05 มีการคอมมิตเหล่านี้
การรองรับลำดับชั้นหลัก-ย่อย:
ตอนนี้ NavigationEventDispatcher
มีตัวจัดสรรหลักและย่อยได้แล้ว ซึ่งจะสร้างโครงสร้างแบบต้นไม้ตามลำดับชั้น ซึ่งจะช่วยให้เหตุการณ์การนำทางเผยแพร่และจัดการได้อย่างยืดหยุ่นมากขึ้นในคอมโพเนนต์ UI ของ Compose ที่ซับซ้อนโดยการแสดงลําดับชั้นโครงสร้างของ UI ผ่านตัวจัดส่งที่เชื่อมโยงกัน (I194ac)
// Create a parent dispatcher that will manage navigation events at a higher level.
val parentDispatcher = NavigationEventDispatcher()
// Create a child dispatcher linked to the parent, forming a hierarchy.
val childDispatcher = NavigationEventDispatcher(parentDispatcher)
isEnabled
พร็อพเพอร์ตี้แบบลำดับชั้นช่วยให้ควบคุมผู้จัดส่งจากบนลงล่างได้ เมื่อตั้งค่า isEnabled
เป็น false
ใน Dispatcher ระบบจะปิดใช้ Dispatcher ทั้งหมดที่สืบทอดมาโดยอัตโนมัติ ฟีเจอร์นี้ช่วยให้ปิดทั้งกิ่งก้านของระบบเหตุการณ์การนำทางได้อย่างมีประสิทธิภาพ (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
นอกจากนี้ พร็อพเพอร์ตี้ isEnabled
ใน NavigationEventCallback
จะพิจารณาสถานะที่เปิดใช้ของเครื่องมือจัดส่งที่เชื่อมโยงแล้ว ซึ่งหมายความว่าระบบจะถือว่ามีการเปิดใช้การเรียกกลับก็ต่อเมื่อมีการเปิดใช้ทั้งการเรียกกลับเองและตัวจัดสรร (รวมถึงบรรพบุรุษ) เพื่อให้มั่นใจว่ามีการควบคุมแบบลำดับชั้นที่สอดคล้องกันในการเปิดใช้งานการเรียกกลับ (I1799a)
// Create a test callback and add it to the child dispatcher.
val callback1 = TestNavigationEventCallback(isEnabled = true)
childDispatcher.addCallback(callback1)
// Since the childDispatcher is disabled, the callback is effectively disabled as well.
assertThat(callback1.isEnabled).isFalse()
เราได้เปิดตัวdispose()
วิธีใหม่สำหรับการล้างข้อมูลที่เหมาะสมของ Dispatcher และ Dispatcher ย่อย การเรียกใช้ dispose()
จะหยุดการทำงานของ Listener เพื่อป้องกันหน่วยความจำรั่ว ยกเลิกการจัดสรร Dispatcher ย่อยทั้งหมดแบบเรียกซ้ำ นำ Callback ทั้งหมดที่ลงทะเบียนไว้กับ Dispatcher ออก และยกเลิกการลิงก์ Dispatcher กับ Dispatcher หลัก ซึ่งจะช่วยให้มั่นใจได้ว่าระบบจะปล่อยทรัพยากรอย่างถูกต้องเมื่อไม่จำเป็นต้องใช้ Dispatcher อีกต่อไป (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
หากมีการเรียกใช้เมธอดสาธารณะใน Dispatcher ที่ถูกทิ้ง ระบบจะส่ง IllegalStateException
ทันที ซึ่งจะช่วยป้องกันไม่ให้เกิดข้อผิดพลาดแบบเงียบๆ และช่วยให้นักพัฒนาแอปทราบถึงการใช้งานที่ไม่เหมาะสมในระหว่างการพัฒนา (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
หมายเหตุ: เราจะเปิดตัว NavigationEventDispatcherOwner
Composable ใหม่ที่จะจัดการ Dispatcher ของ Child ภายใน Compose UI โดยอัตโนมัติใน aosp/3692572 อย่างไรก็ตาม การเปลี่ยนแปลงนี้ไม่ได้รวมอยู่ในการเปิดตัวปัจจุบัน และเรามีแผนที่จะรวมไว้ในการเปิดตัวครั้งถัดไป
คลังการทดสอบการนำทาง
- เพิ่ม
navigationevent-testing
โมดูลเพื่อจัดเตรียมยูทิลิตีการทดสอบเฉพาะสำหรับไลบรารีnavigationevent
(0e50b6) - เพิ่มคลาสยูทิลิตีปลอม
TestNavigationEventCallback
สำหรับการทดสอบ โดยจะบันทึกการเรียกเมธอด Callback และจัดเก็บรายการNavigationEvent
ที่ได้รับเพื่อรองรับการยืนยัน (4a0246) - เพิ่ม
TestNavigationEvent
ฟังก์ชันยูทิลิตีจำลองเพื่อสร้างอินสแตนซ์NavigationEvent
ที่มีค่าเริ่มต้น ซึ่งจะช่วยลดความซับซ้อนของการทดสอบหน่วยสำหรับการประมวลผลเหตุการณ์การนำทาง (3b63f5) - เพิ่มคลาสยูทิลิตีปลอม
TestNavigationEventDispatcherOwner
สำหรับการทดสอบ โดยจะติดตามจำนวนเหตุการณ์สำรองและเหตุการณ์การเปลี่ยนสถานะที่เปิดใช้เพื่อรองรับการยืนยันการโต้ตอบในการทดสอบ (c8753e)
การเปลี่ยนแปลง API
- ย้าย
NavigationEventInputHandler
จากandroidMain
ไปยังcommonMain
เพื่อให้พร้อมใช้งานในโค้ดทั่วไปของ KMP เพิ่มpublic send*
วิธีใหม่สำหรับการส่งเหตุการณ์ เปลี่ยนฟังก์ชันการเรียกใช้ในNavigationEventDispatcher
จากpublic
เป็นinternal
ตอนนี้ผู้ใช้ต้องใช้NavigationEventInputHandler
เพื่อส่งเหตุการณ์ (Ia7114) - เปลี่ยนชื่อ
NavigationInputHandler
เป็นOnBackInvokedInputHandler
(I63405)
การแก้ไขข้อบกพร่อง
- ทำการรีแฟกเตอร์
NavigationEventDispatcher
เพื่อลดโอเวอร์เฮดโดยหลีกเลี่ยงการจัดสรรรายการกลางและปรับปรุงประสิทธิภาพการเรียกกลับ (I82702, I1a9d9) - เพิ่มคำอธิบายประกอบ
@FloatRange
ลงในฟิลด์touchX
,touchY
และprogress
ในNavigationEvent
เพื่อบังคับใช้ช่วงค่าที่ถูกต้องในเวลาคอมไพล์และปรับปรุงความปลอดภัยของ API (Iac0ec)
เวอร์ชัน 1.0.0-alpha04
2 กรกฎาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ใช้
implementedInJetBrainsFork
เพื่อnavigationevent-compose
และเพิ่มเป้าหมายcommonStubs
ให้ตรงกับรูปแบบของ Compose ขอเปลี่ยนแปลงโดย JetBrains (f60c79) - แก้ไขการใช้ปลั๊กอินคอมไพเลอร์ Compose สำหรับ Kotlin/Native เพื่อให้มั่นใจว่ามีการสร้าง Stub ที่ถูกต้อง ไม่มีผลต่อ API สาธารณะหรือลักษณะการทำงาน (1890c9)
เวอร์ชัน 1.0.0-alpha03
18 มิถุนายน 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เปิดตัว
navigationevent-compose
โมดูลใหม่เพื่อรองรับฟีเจอร์ Jetpack Compose ในไลบรารีnavigationevent
(980d78) NavigationEvent
Compose ได้เพิ่มLocalNavigationEventDispatcherOwner
การแต่งเพลงในพื้นที่ใหม่ โดยจะแสดงผลค่าที่อนุญาตให้เป็น Null เพื่อให้ระบุได้ดียิ่งขึ้นว่าค่าดังกล่าวพร้อมใช้งานในองค์ประกอบปัจจุบันหรือไม่ ตอนนี้NavigationEventHandler
จะแสดงข้อผิดพลาดหากไม่พบเจ้าของที่เกี่ยวข้อง (62ffda)NavigationEvent
Compose ได้เพิ่มNavigationEventHandler
Composable ใหม่เพื่อจัดการเหตุการณ์ (ท่าทางสัมผัสย้อนกลับแบบคาดการณ์) โดยจะแสดงFlow
ของออบเจ็กต์NavigationEvent
ที่ต้องรวบรวมใน Lambda ที่ระงับซึ่งคุณระบุ c42ba6 :
NavigationEventHandler { progress: Flow<NavigationEvent> ->
// This block is executed when the back gesture begins.
try {
progress.collect { backEvent ->
// Handle gesture progress updates here.
}
// This block is executed if the gesture completes successfully.
} catch (e: CancellationException) {
// This block is executed if the gesture is cancelled
throw e
} finally {
// This block is executed either the gesture is completed or cancelled
}
}
การเปลี่ยนแปลง API
- ตอนนี้คุณจะลงทะเบียน
NavigationEventCallback
แต่ละรายการกับNavigationEventDispatcher
ได้เพียงรายการเดียวในแต่ละครั้ง การเพิ่มลงในผู้จัดส่งหลายรายจะทำให้เกิดIllegalStateException
โปรดทราบว่าลักษณะการทำงานนี้แตกต่างจากOnBackPressedDispatcher
ซึ่งอนุญาตให้มีผู้จัดส่งหลายราย (e82c19) - ทำให้
isPassThrough
เป็นval
เพื่อป้องกันการเปลี่ยนแปลงระหว่างการนำทาง ซึ่งอาจทำให้การส่งของNavigationEvent
ทำงานไม่ได้ (I0b287)
เวอร์ชัน 1.0.0-alpha02
4 มิถุนายน 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แทนที่ตัวสร้างรองของ
NavigationEventDispatcher
ด้วยอาร์กิวเมนต์เริ่มต้น (I716a0) - นำพร็อพเพอร์ตี้ที่มีลำดับความสำคัญออกจาก
NavigationEventCallback
ส่งต่อลำดับความสำคัญไปยังNavigationEventDispatcher.addCallback()
แทน (I13cae)
การแก้ไขข้อบกพร่อง
- แก้ไข
ConcurrentModificationException
ที่อาจเกิดขึ้นเมื่อมีการเรียกใช้NavigationEventCallback.remove()
เนื่องจากการแก้ไขรายการภายในของรายการที่ปิดได้พร้อมกัน (b/420919815)
เวอร์ชัน 1.0.0-alpha01
20 พฤษภาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ไลบรารี
androidx.navigationevent
มี API ที่เน้น KMP เป็นอันดับแรกสำหรับการจัดการการย้อนกลับของระบบและการย้อนกลับแบบคาดการณ์NavigationEventDispatcher
เป็น API ทั่วไปสําหรับการลงทะเบียนอินสแตนซ์NavigationEventCallback
อย่างน้อย 1 รายการเพื่อรับเหตุการณ์ย้อนกลับของระบบ - เลเยอร์นี้อยู่ใต้ API ที่เปิดตัวก่อนหน้านี้ใน
androidx.activity
และมีจุดมุ่งหมายเพื่อเป็นตัวแทนที่ยืดหยุ่นกว่าในการใช้ Activity API ในคอมโพเนนต์ระดับสูงขึ้น หรือใช้ API ของเฟรมเวิร์ก AndroidOnBackInvokedDispatcher
โดยตรง เราได้เขียน API ของandroidx.activity
ใหม่โดยใช้ Navigation Event API เป็นส่วนหนึ่งของ Activity 1.12.0-alpha01