navigationevent
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
30 กรกฎาคม 2025 | - | - | - | 1.0.0-alpha05 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน NavigationEvent คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงใน โปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูลของคุณ
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha05" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha05") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
ไม่มีบันทึกประจำรุ่นสำหรับอาร์ติแฟกต์นี้
รุ่น 1.0
เวอร์ชัน 1.0.0-alpha05
30 กรกฎาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha05 มีการคอมมิตเหล่านี้
การรองรับลำดับชั้นหลัก-ย่อย:
ตอนนี้ NavigationEventDispatcher
มีตัวจัดสรรหลักและย่อยได้แล้ว ซึ่งจะสร้างโครงสร้างแบบต้นไม้ตามลำดับชั้น ซึ่งจะช่วยให้เหตุการณ์การนำทางเผยแพร่และจัดการได้อย่างยืดหยุ่นมากขึ้นในคอมโพเนนต์ UI ของ Compose ที่ซับซ้อนโดยการแสดงลําดับชั้นโครงสร้างของ UI ผ่าน Dispatcher ที่เชื่อมโยงกัน (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()
จะหยุดผู้ฟังเพื่อป้องกันหน่วยความจำรั่ว กำจัด Dispatcher ย่อยทั้งหมดแบบเรียกซ้ำ นำ Callback ทั้งหมดที่ลงทะเบียนกับ 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