navigationevent
नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा वर्शन |
---|---|---|---|---|
13 अगस्त, 2025 | - | - | - | 1.0.0-alpha06 |
डिपेंडेंसी का एलान करना
navigationevent पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle
फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha06" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha06") }
डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव/राय दें या शिकायत करें
आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. कृपया नई लाइब्रेरी बनाने से पहले, इस लाइब्रेरी में मौजूद मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.
ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.
इस आर्टफ़ैक्ट के लिए कोई रिलीज़ नोट नहीं है.
वर्शन 1.0
वर्शन 1.0.0-alpha06
13 अगस्त, 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha06
रिलीज़ हो गया है. वर्शन 1.0.0-alpha06 में ये कमिट शामिल हैं.
नई सुविधाएं
Passive Listeners API
अब किसी भी नेविगेशन होस्ट से कॉन्टेक्स्ट के हिसाब से कस्टम जानकारी पास की जा सकती है. साथ ही, अपने यूज़र इंटरफ़ेस (यूआई) में कहीं से भी, जेस्चर की स्थिति में होने वाले बदलावों को पैसिव तरीके से सुना जा सकता है. इससे, प्रिडिक्टिव बैक और जेस्चर से कंट्रोल किए जाने वाले अन्य नेविगेशन के लिए, कॉन्टेक्स्ट अवेयर ऐनिमेशन चालू हो जाते हैं.
इस सुविधा के दो हिस्से हैं:
- जानकारी देना - कस्टम डेटा को ले जाने के लिए,
NavigationEventInfo
का इस्तेमाल करें. - इस्तेमाल की जा रही स्थिति - जेस्चर की प्रोग्रेस और कॉन्टेक्स्ट को देखने के लिए,
dispatcher.state
(NavigationEventState
) का इस्तेमाल करें.
NavigationEventCallback
अब एक ही कॉल में जेस्चर का कॉन्टेक्स्ट सेट करने के लिए,setInfo(currentInfo, previousInfo)
तरीके का इस्तेमाल किया जा सकता है (I1d5e7, b/424470518).NavigationEventHandler
एक नया ओवरलोड जोड़ता है, जोcurrentInfo
औरpreviousInfo
को स्वीकार करता है. इससे यह 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) को दिखाता है.StateFlow
पर आधारित ये एपीआई, किसी भी यूज़र इंटरफ़ेस (यूआई) को इवेंट को सीधे तौर पर हैंडल किए बिना, जेस्चर की प्रोग्रेस और कॉन्टेक्स्ट के हिसाब से डेटा देखने की अनुमति देते हैं.
उदाहरण:
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 */ }
}
NavigationEventState
(I7b196) मेंprogress
प्रॉपर्टी जोड़ें. इससे प्रोसेस जारी रहने परlatestEvent.progress
वैल्यू मिलती है. इसके अलावा,0F
वैल्यू मिलती है:val progress = state.progress
NavigationEventDispatcherOwner
कंपोज़ेबल जोड़कर,NavigationEventDispatcher
इंस्टेंस को क्रम से बनाया, लिंक किया, और हटाया जा सकता है. इससे डिसपैचर की चालू स्थिति को डाइनैमिक तरीके से कंट्रोल करने और अपने-आप साफ़ होने की सुविधा चालू होती है.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
एपीआई में हुए बदलाव
isPassthrough
पैरामीटर कोNavigationEventCallback
से हटा दिया गया है. (I99028, b/424470518)NavigationEventState
कंस्ट्रक्टर अब इंटरनल हैं. जांच करने के लिए,DirectNavigationEventInputHandler
की मदद से स्थिति को अपडेट करें. यह डिफ़ॉल्ट रूप सेIdle
पर सेट होती है. स्टेट कोInProgress
पर सेट करने के लिए,handleOnStarted
याhandleOnProgressed
को कॉल करें. साथ ही, इसेIdle
पर वापस लाने के लिए,handleOnCompleted
याhandleOnCancelled
को कॉल करें.NavigationEventInfo
को अपडेट करने के लिए,NavigationEventCallback.setInfo
का इस्तेमाल करें. (I93dca, b/424470518)NavigationEvent
में डिफ़ॉल्ट पैरामीटर जोड़े गए हैं, ताकि इसे आसानी से इंस्टैंटिएट किया जा सके और टेस्टिंग को आसान बनाया जा सके. इनका इस्तेमालTestNavigationEvent
की जगह किया जाना चाहिए. (I5dc49, I232f4)- हमने
TestNavigationEventCallback
जोड़ा है. इससे, नेविगेशन इवेंट की जांच की जा सकेगी. इसके लिए, मौजूदा/पिछली स्थितियां तय की जा सकेंगी. (Idd22e, b/424470518) NavigationEventInputHandler
को ऐब्स्ट्रैक्ट क्लास में बदल दिया गया है, ताकि पिछलेAbstractNavigationEventInputHandler
कोDirectNavigationEventInputHandler
(Iadde5, Ifed40I3897c, b/432616296, b/435416924) में लागू किया जा सकेNavigationEventInputHandler
में मौजूदsend*
फ़ंक्शन के प्रीफ़िक्स का नाम बदलकरhandle*
कर दिया गया है. (Iffcaf)OnBackInvokedInputHandler
अब नईabstract
NavigationInputHandler
की सुविधा देता है. (Ib45aa)NavigationEventDispatcherOwner
को बदलकर, माता-पिता के डिस्पैचर की ज़रूरत वाली सुविधा में बदल दिया गया है. इसमें रूट डिस्पैचर बनाने के लिए, आपकोnull
को साफ़ तौर पर पास करना होगा. (Ia6f64, b/431534103)
गड़बड़ियां ठीक की गईं
NavigationEventDispatcher.dispose()
में कलेक्शन की कॉपी बनाने से बचने की वजह से, बेहतर परफ़ॉर्मेंस मिली. (I4ab09)- उस समस्या को ठीक किया गया है जिसकी वजह से,
NavigationEventHandler
के चालू होने की स्थिति में बदलाव होने पर, वह सही तरीके से जवाब नहीं देता था. (Ia5268,I19bec, I5be5c, b/431534103)
Docs से जुड़े अपडेट
- 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
में पैरंट और चाइल्ड डिस्पैचर हो सकते हैं. इससे हैरारकी वाला ट्री स्ट्रक्चर बनता है. इससे नेविगेशन इवेंट को, Compose के जटिल यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट में ज़्यादा आसानी से मैनेज किया जा सकता है. ऐसा, चेन किए गए डिस्पैचर के ज़रिए यूज़र इंटरफ़ेस (यूआई) की स्ट्रक्चरल हैरारकी को दिखाकर किया जाता है. (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
पर सेट करने से, उसके सभी डिसेंडेंट डिसपैचर अपने-आप बंद हो जाते हैं. इस सुविधा की मदद से, नेविगेशन इवेंट सिस्टम की पूरी ब्रांच को आसानी से बंद किया जा सकता है. (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
इसके अलावा, NavigationEventCallback
पर मौजूद isEnabled
प्रॉपर्टी अब उससे जुड़े डिसपैचर की चालू स्थिति का पालन करती है. इसका मतलब है कि कॉलबैक को सिर्फ़ तब चालू माना जाता है, जब कॉलबैक और उसके डिस्पैचर (इसमें उसके पूर्वज भी शामिल हैं) दोनों चालू हों. इससे यह पक्का होता है कि कॉलबैक को चालू करने पर, क्रम के हिसाब से कंट्रोल बना रहे. (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()
विधि शुरू की गई है. dispose()
को कॉल करने से, सुनने वालों को मेमोरी लीक से रोकने में मदद मिलती है. साथ ही, यह सभी चाइल्ड डिस्पैचर को बार-बार डिस्पोज़ करता है, डिस्पैचर के साथ रजिस्टर किए गए सभी कॉलबैक को हटाता है, और इसे इसके पैरंट से अनलिंक करता है. इससे यह पक्का होता है कि जब डिस्पैचर की ज़रूरत नहीं होती है, तो संसाधनों को सही तरीके से रिलीज़ किया जाता है. (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
अगर डिस्पोज़ किए गए डिसपैचर पर किसी सार्वजनिक तरीके को कॉल किया जाता है, तो तुरंत IllegalStateException
थ्रो कर दिया जाता है. इससे, बिना किसी सूचना के होने वाली गड़बड़ियों को रोकने में मदद मिलती है. साथ ही, डेवलपर को डेवलपमेंट के दौरान, गलत इस्तेमाल की पहचान करने में मदद मिलती है. (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
ध्यान दें: हम एक नया NavigationEventDispatcherOwner
कंपोज़ेबल पेश करेंगे. यह aosp/3692572 में, Compose UI के अंदर चाइल्ड डिस्पैचर को अपने-आप मैनेज करता है. हालांकि, यह बदलाव मौजूदा रिलीज़ में शामिल नहीं किया गया है. इसे अगली रिलीज़ में शामिल किया जाएगा.
Navigation Testing Library
navigationevent-testing
लाइब्रेरी के लिए, टेस्टिंग की खास सुविधाएं देने वालाnavigationevent-testing
मॉड्यूल जोड़ा गया.navigationevent
(0e50b6)- जांच के लिए,
TestNavigationEventCallback
नकली यूटिलिटी क्लास जोड़ें. यह कुकी, कॉलबैक के तरीके से किए गए कॉल रिकॉर्ड करती है. साथ ही, पुष्टि करने के लिए मिलेNavigationEvent
आइटम सेव करती है. (4a0246) - डिफ़ॉल्ट वैल्यू के साथ
NavigationEvent
इंस्टेंस बनाने के लिए,TestNavigationEvent
फ़ेक यूटिलिटी फ़ंक्शन जोड़ा गया है. इससे नेविगेशन इवेंट प्रोसेसिंग के लिए यूनिट टेस्ट आसान हो जाती हैं. (3b63f5) - जांच के लिए,
TestNavigationEventDispatcherOwner
नकली यूटिलिटी क्लास जोड़ें. यह फ़ॉलबैक और चालू स्थिति में बदलाव वाले इवेंट की संख्या को ट्रैक करता है, ताकि टेस्ट में इंटरैक्शन की पुष्टि की जा सके. (c8753e)
एपीआई में हुए बदलाव
NavigationEventInputHandler
कोandroidMain
सेcommonMain
में ले जाएं, ताकि यह KMP के सामान्य कोड में उपलब्ध हो. इवेंट भेजने के लिए, नएpublic send*
तरीके जोड़ें.NavigationEventDispatcher
पर डिसपैच फ़ंक्शन कोpublic
सेinternal
में बदलें. अब उपयोगकर्ताओं को इवेंट भेजने के लिए,NavigationEventInputHandler
का इस्तेमाल करना होगा. (Ia7114)NavigationInputHandler
का नाम बदलकरOnBackInvokedInputHandler
करें. (I63405)
गड़बड़ियां ठीक की गईं
NavigationEventDispatcher
को फिर से फ़ैक्टर किया गया है, ताकि इंटरमीडिएट लिस्ट ऐलोकेशन से बचा जा सके और कॉल बैक डिस्पैच की परफ़ॉर्मेंस को बेहतर बनाया जा सके. इससे ओवरहेड कम हो जाएगा. (I82702, I1a9d9)NavigationEvent
मेंtouchX
,touchY
, औरprogress
फ़ील्ड में@FloatRange
एनोटेशन जोड़ें, ताकि कंपाइल टाइम पर वैल्यू की मान्य रेंज लागू की जा सके और एपीआई की सुरक्षा को बेहतर बनाया जा सके. (Iac0ec)
वर्शन 1.0.0-alpha04
2 जुलाई, 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha04
रिलीज़ हो गया है. वर्शन 1.0.0-alpha04 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- कंपोज़ करने के नियमों के मुताबिक,
navigationevent-compose
के लिएimplementedInJetBrainsFork
का इस्तेमाल किया गया है. साथ ही,commonStubs
टारगेट जोड़ा गया है. JetBrains ने बदलाव का अनुरोध किया है. (f60c79) - सही स्टब जनरेट करने के लिए, Kotlin/Native के लिए Compose कंपाइलर प्लगिन का इस्तेमाल किया गया. सार्वजनिक एपीआई या उनके काम करने के तरीके पर कोई असर नहीं पड़ेगा. (1890c9)
वर्शन 1.0.0-alpha03
18 जून, 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha03
रिलीज़ हो गया है. वर्शन 1.0.0-alpha03 में ये कमिट शामिल हैं.
नई सुविधाएं
navigationevent
लाइब्रेरी में Jetpack Compose की सुविधाओं को सपोर्ट करने के लिए, नयाnavigationevent-compose
मॉड्यूल जोड़ा गया है. (980d78)NavigationEvent
Compose ने एक नईLocalNavigationEventDispatcherOwner
लोकल कंपोज़िशन जोड़ी है. यह एक ऐसी वैल्यू दिखाता है जो नल हो सकती है, ताकि यह बेहतर तरीके से तय किया जा सके कि यह मौजूदा कंपोज़िशन में उपलब्ध है या नहीं. अगर मालिक का खाता नहीं मिलता है, तो अबNavigationEventHandler
गड़बड़ी का मैसेज दिखाएगा. (62ffda)NavigationEvent
Compose में,NavigationEventHandler
Composable का नया वर्शन जोड़ा गया है. इसका इस्तेमाल, (अनुमानित बैक जेस्चर) इवेंट को हैंडल करने के लिए किया जाता है. यहNavigationEvent
ऑब्जेक्ट कीFlow
देता है. इन्हें आपको निलंबित करने वाले लैम्डा फ़ंक्शन में इकट्ठा करना होगा 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
}
}
एपीआई में हुए बदलाव
- अब हर
NavigationEventCallback
को एक बार में सिर्फ़ एकNavigationEventDispatcher
के साथ रजिस्टर किया जा सकता है. इसे एक से ज़्यादा डिसपैचर के साथ जोड़ने पर,IllegalStateException
दिखेगा. ध्यान दें कि यह सुविधा,OnBackPressedDispatcher
से अलग है.OnBackPressedDispatcher
में एक से ज़्यादा डिस्पैचर की अनुमति होती है. (e82c19) - नेविगेशन के दौरान म्यूटेशन को रोकने के लिए,
isPassThrough
कोval
बनाया गया है. इससेNavigationEvent
के डिसपैचिंग में समस्या आ सकती है. (I0b287)
वर्शन 1.0.0-alpha02
4 जून, 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha02
रिलीज़ हो गया है. वर्शन 1.0.0-alpha02 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
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
लाइब्रेरी, सिस्टम बैक के साथ-साथ अनुमानित बैक को मैनेज करने के लिए, KMP-first API उपलब्ध कराती है.NavigationEventDispatcher
, एक या उससे ज़्यादाNavigationEventCallback
इंस्टेंस को रजिस्टर करने के लिए एक सामान्य एपीआई के तौर पर काम करता है, ताकि सिस्टम बैक इवेंट मिल सकें.- यह लेयर,
androidx.activity
में पहले रिलीज़ किए गए एपीआई के नीचे मौजूद होती है. इसका मकसद, ज़्यादा लेवल वाले कॉम्पोनेंट में Activity API का इस्तेमाल करने या Android फ़्रेमवर्कOnBackInvokedDispatcher
API का सीधे तौर पर इस्तेमाल करने के लिए, कम राय वाला विकल्प उपलब्ध कराना है. Activity 1.12.0-alpha01 के तहत,androidx.activity
एपीआई को नेविगेशन इवेंट एपीआई के आधार पर फिर से लिखा गया है.