navigationevent
| नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
|---|---|---|---|---|
| 24 सितंबर, 2025 | - | - | - | 1.0.0-alpha09 |
डिपेंडेंसी का एलान करना
navigationevent पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha09" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha09") }
डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव/राय दें या शिकायत करें
आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या आपके पास इस लाइब्रेरी को बेहतर बनाने के लिए सुझाव हैं, तो हमें बताएं. कृपया नई समस्या सबमिट करने से पहले, इस लाइब्रेरी में शामिल मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.
ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.
इस आर्टफ़ैक्ट के लिए कोई रिलीज़ नोट नहीं है.
वर्शन 1.0
वर्शन 1.0.0-alpha09
24 सितंबर, 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha09 रिलीज़ हो गया है. वर्शन 1.0.0-alpha09 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
Idle()को इंस्टैंशिएट करने के बजाय,NavigationEventTransitionState.Idleसिंगलटन ऑब्जेक्ट का सीधे तौर पर इस्तेमाल करें. (Ic7d9e, b/444734264)- सुविधा देने वाले कंस्ट्रक्टर को इंटरनल बनाएं. सीधे कंस्ट्रक्शन के बजाय, सार्वजनिक
NavigationEventDispatcher.historyके ज़रिए इंस्टेंस पाएं. (I3b7e0, b/444734264) NavigationEventStateकोrememberNavigationEventStateके ज़रिए बनाने की ज़रूरत होती है. कंस्ट्रक्टर अब इंटरनल है. (Ie143c, b/444734264)onBackCompletedFallbackकोfallbackOnBackPressedके इस्तेमाल और कंस्ट्रक्टर पैरामीटर से बदलें. व्यवहार में कोई बदलाव नहीं हुआ है. यह सिर्फ़ उन इवेंट पर लागू होता है जिनमें कॉन्टेंट लोड होने की प्रोसेस पूरी हो गई है और बैक बटन दबाने की कार्रवाई को हैंडल नहीं किया गया है. (Idabe9, b/444734264)NavigationEventHistory(mergedHistory, currentIndex)का मुख्य कंस्ट्रक्टर अबinternalहै. बाहरी उपभोक्ताओं को इंस्टेंस बनाने के लिए, सार्वजनिक कंस्ट्रक्टर (खाली कंस्ट्रक्टर या पार्टीशन पर आधारित कंस्ट्रक्टर) का इस्तेमाल करना होगा. (I1c047, b/444734264)View.setViewTreeNavigationEventDispatcherOwnerको ऐसे मालिक को स्वीकार करने की अनुमति दें जो शून्य हो सकता है (Ic9eb6, b/444436762)NavigationEventInfoअबinterfaceके बजायabstract classहै. सभी कस्टम लागू करने की प्रोसेस को क्लास से इनहेरिट करने के लिए अपडेट करें.जैसे,data class MyInfo : NavigationEventInfo(). (I1e59c, b/444734264)- लेगसी
NavigationEventDispatcher.stateप्रॉपर्टी औरgetState<T>()फ़ंक्शन को हटा दिया गया है. जेस्चर की प्रोग्रेस के लिए, नए और अलगdispatcher.transitionStateऔर नेविगेशन स्टैक के लिएdispatcher.historyफ़्लो का इस्तेमाल करें. (Ic2ceb, b/444734264) NavigationEventInput.onInfoChanged(...)कॉलबैक को बदल दिया गया है. अपडेट को एकNavigationEventHistoryऑब्जेक्ट के तौर पर पाने के लिए, नयाonHistoryChanged(history: NavigationEventHistory)कॉलबैक लागू करें. (I23e0b, b/444734264)- नया ग्लोबल
NavigationEventDispatcher.historyStateFlowलॉन्च करना. इस नॉन-जेनेरिक फ़्लो की मदद से, ऑब्ज़र्वर सिर्फ़ नेविगेशन स्टैक में हुए बदलावों की सदस्यता ले सकते हैं. साथ ही, यह जेस्चर की प्रोग्रेस के दौरान स्थिर रहता है. यहtransitionStateका काउंटरपार्ट है. (I1db10, b/444734264) - नया ग्लोबल
NavigationEventDispatcher.transitionStateStateFlowलॉन्च करना. इस नॉन-जेनेरिक फ़्लो की मदद से, ऑब्ज़र्वर सिर्फ़ फ़िज़िकल जेस्चर की स्थिति (Idle/InProgress) की सदस्यता ले सकते हैं. यह सदस्यता, इतिहास से अलग होती है. (I171fa, b/444734264) NavigationEventHistoryStateक्लास के बारे में जानकारी दें. यह नेविगेशन की जानकारी के इतिहास को देखने के लिए मुख्य एपीआई के तौर पर काम करेगा. यह जेस्चर की स्थिति से अलग होगा. (I81ca5, b/444734264)NavigationEventको अब@Immutableके तौर पर मार्क किया गया है. इससे Compose कंपाइलर को, फिर से कंपोज़ करने की प्रोसेस को ऑप्टिमाइज़ करने में मदद मिलती है. (If78c7, b/444734264)navigationevent-composeहैंडलर एपीआई अपडेट किए गए हैं.NavigationEventHandlerऔरNavigationBackHandler(और वैरिएंट) अब एक नए ओवरलोड का इस्तेमाल करते हैं. यह ओवरलोड, होस्ट किए गएNavigationEventStates को स्वीकार करता है. सामान्य ओवरलोड (currentInfoलेने वाले) को सुरक्षित रखा जाता है. साथ ही, अब वे इस नए स्टेट मॉडल का इस्तेमाल करते हैं. (Ic3251, b/444734264)navigationevent-composeलाइब्रेरी में नया@StableNavigationEventState<T>स्टेट होल्डर जोड़ें. यह ऑब्जेक्ट, लोकल हिस्ट्री को लोकल जेस्चर की स्थिति के साथ जोड़ता है. साथ ही, यहrememberNavigationEventStateऔरNavigationEventHandlerके बीच मुख्य लिंक होगा. (Ifb69f, b/444734264)NavigationEventHandlerमें नई सार्वजनिक, सिर्फ़ पढ़ने के लिए उपलब्धtransitionState: TransitionStateप्रॉपर्टी जोड़ें. हैंडलर अब अपनी ट्रांज़िशन स्थिति बनाए रखते हैं. इसे बाहरी सिस्टम देख सकते हैं. (I9acd2, b/444734264)- पेश है नई
TransitionStateसील की गई क्लास. यह जेस्चर की स्थिति को मॉनिटर करने के लिए मुख्य एपीआई के तौर पर काम करेगा. यह नेविगेशन के इतिहास से अलग होगा. (Id4beb, b/444734264) NavigationEventHandlerपरcurrentInfo,backInfo, औरforwardInfoको सार्वजनिक, रीड-ओनली प्रॉपर्टी के तौर पर दिखाएं. (Ia7636, b/444734264)NavigationEventHandlerको लागू करने के लिए, अब बेस कंस्ट्रक्टर कोinitialInfo: Tवैल्यू देनी होगी. (Idcfea, b/444734264)OnBackInvokedInputकोOnBackInvokedOverlayInputयाOnBackInvokedDefaultInputसे बदलें. (I5323f, b/428948766)NavigationEventStateको@Immutableके तौर पर मार्क करें. इससे कंपोज़ की परफ़ॉर्मेंस बेहतर होती है. ऐसा इसलिए होता है, क्योंकि इस स्थिति को मॉनिटर करने वाले कंपोज़ेबल, रेंडरिंग को सही तरीके से स्किप कर सकते हैं. (I399c8)NavigationEventInfo.NotProvidedका नाम बदलकरNavigationEventInfo.None;करें, ताकि अपडेट किए गए रेफ़रंस मिल सकें. व्यवहार में कोई बदलाव नहीं हुआ है. (I5e2d4)NavigationEventInfoको अब@Immutableके तौर पर मार्क किया गया है. इससे Compose कंपाइलर को, फिर से कंपोज़ करने की प्रोसेस को ऑप्टिमाइज़ करने में मदद मिलती है. (I7c112)- बैक कंप्लीशन फ़ॉलबैक के लिए मज़ेदार इंटरफ़ेस की मदद से, Java एर्गोनॉमिक्स को बेहतर बनाया गया. (I8a860)
onHasEnabledHandlerChangedका नाम बदलकरonHasEnabledHandlersChangedकरें. इससे यह पता चलता है कि कॉलबैक, सिर्फ़ एक हैंडलर की स्थिति के बारे में नहीं, बल्कि सभी हैंडलर की स्थिति के बारे में रिपोर्ट करता है. (I1af61, b/443711297)NavigationEventDispatcher;सेhasEnabledHandler()को हटाएं. इसके बजाय,NavigationEventInput.onHasEnabledHandlersChangedका इस्तेमाल करें. (Idef72, b/443711297)onInfoChangedमेंonInfoChangedकॉलबैक जोड़ें, ताकि सुनने वालों को नेविगेशन के इतिहास में हुए बदलावों के बारे में सूचना दी जा सके.NavigationEventInputइससे मौजूदा, बैक, और फ़ॉरवर्ड स्टैक का पूरा कॉन्टेक्स्ट मिलता है. इससे इनपुट, कॉन्टेक्स्ट के हिसाब से जानकारी पर प्रतिक्रिया दे पाते हैं. (I69a8b, b/443282983)NavigationEventकेswipeEdgeको@IntDefबनाएं (Icee54, b/443950342)- डिसपैचर को एक प्राथमिकता के दायरे में लाने के लिए,
NavigationEventDispatcher.addInputमेंpriorityपैरामीटर जोड़ें. अबonHasEnabledCallbacksChangedजैसे इवेंट सिर्फ़ तब फ़ायर होते हैं, जब उस प्राथमिकता पर कॉलबैक बदलते हैं. (I3e488, b/443711297) NavigationEventDispatcherपैरामीटर का नाम बदलकर पैरंट कर दिया गया है, ताकि इसे आसानी से समझा जा सके.parentDispatcher(Id4f1f, b/443801782)- Java का इस्तेमाल करने वाले लोगों के लिए,
NavigationEventPriorityके बजाय@IntDefको इस्तेमाल करने की सुविधा उपलब्ध कराई गई (I10a9f, b/440514265) - नेविगेशन हैंडलर के अनुबंध को लागू करता है. अगर आपके
NavigationEventHandlerनेisBackEnabledयाisForwardEnabledकोtrueपर सेट किया है, तो अब आपकोonBackCompletedयाonForwardCompletedको बदलना होगा. डिफ़ॉल्ट तौर पर लागू किए गए बदलावों से अब एक अपवाद दिखता है, ताकि साइलेंट फ़ेलियर को रोका जा सके. (I17c62) - नेविगेशन इवेंट हैंडलर जोड़ते समय, प्राथमिकता की मान्य वैल्यू लागू करें. अब, प्राथमिकता के तौर पर ऐसे
addHandlerको कॉल करने परIllegalArgumentExceptionदिखेगा जो काम नहीं करता. इससे, टारगेट किए गए सभी प्लैटफ़ॉर्म पर गलत इस्तेमाल के बारे में तुरंत जानकारी मिलेगी. (I3c474)
गड़बड़ियां ठीक की गईं
addHandlerको आइडेमपोटेंट बनाएं; डुप्लीकेट रजिस्ट्रेशन को अनदेखा करें. (I052aa, b/444734264)- रीकंपोज़िशन के दौरान,
NavigationEventStateप्रॉपर्टी को सिंक में रखें. (Ib3b4d, b/444734264) - पक्का करें कि
NavigationEventInputsको रजिस्ट्रेशन के तुरंत बाद, मौजूदा कॉन्टेक्स्ट की जानकारी (मौजूदा, पीछे, आगे) मिल जाए. (Ie65bf, b/443282983)
वर्शन 1.0.0-alpha08
10 सितंबर, 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha08 रिलीज़ हो गया है. वर्शन 1.0.0-alpha08 में ये बदलाव शामिल हैं.
नई सुविधाएं
- लैंबडा पर आधारित
NavigationEventHandlerएपीआई लॉन्च किया गया है. यह फ़्लो पर आधारित हैंडलर की जगह लेगा. फ़्लो इकट्ठा करने के बजाय, सामान्य कॉलबैक की मदद से आगे और पीछे जाने के जेस्चर को हैंडल करें. इससे छोटे-मोटे बदलाव वाले दोहराव को कम किया जा सकता है और रद्द करने से जुड़ी समस्याओं से बचा जा सकता है.NavigationBackHandlerऔरNavigationForwardHandlerको टारगेट किए गए सुविधा एपीआई के तौर पर उपलब्ध कराएं. फ़्लो पर आधारितNavigationEventHandlerको हटाएं; नए कॉलबैक पर माइग्रेट करें. (I23bac, b/436248277) - इससे, पैसिव लिसनर को बैक बटन दबाने पर दिखने वाली पूरी स्क्रीन का ऐक्सेस मिलता है. इसके लिए, बैक बटन दबाने पर दिखने वाली जानकारी को एक साथ दिखाया जाता है. इससे यूज़र इंटरफ़ेस (यूआई) को सबसे ऊपर मौजूद कॉलबैक तक सीमित रहने के बजाय, झलकियां और नेस्ट किए गए नेविगेशन इतिहास को रेंडर करने की सुविधा मिलती है. (I7a510, b/436248277)
- नेविगेशन की स्थिति को साफ़ तौर पर बताने के लिए, बैक/करंट/फ़ॉरवर्ड मॉडल पेश किया गया है. साथ ही, नेस्ट किए गए हैंडलर के साथ फ़ॉरवर्ड नेविगेशन की सुविधा दी गई है. (Ib86da, b/420443609)
NavigationEventCallbackमेंonForward*तरीके औरisForwardEnabledजोड़ें. (Ic100f, b/436248290)NavigationEventInputमें आगे बढ़ने की सुविधा जोड़ी गई. (I5734b)
एपीआई में हुए बदलाव
TestNavigationEventCallbackका इस्तेमाल करके, फ़ॉरवर्ड नेविगेशन इवेंट की टेस्टिंग चालू करें.isForwardEnabledऔरonForward*हुक का इस्तेमाल करें. (I21fb5, b/420443609)NavEventमें,onEvent*कॉलबैक का नाम बदलकरonBack*कर दें. (I228b3, b/436248290)SwipeEdgeको इनलाइन क्लास में बदलें. (Id5e01)navigationeventलाइब्रेरी को Java के साथ इंटरोऑपरेबल बनाएं. अब सभी सार्वजनिक एपीआई को Java कोड से पूरी तरह से ऐक्सेस किया जा सकता है. इससे, इन्हें अलग-अलग भाषाओं या सिर्फ़ Java वाले प्रोजेक्ट में आसानी से इंटिग्रेट किया जा सकता है. (Ibc944,I5465f, I9fb1e, b/440532890b/443040294)NavigationEventCallbackका नाम बदलकरNavigationEventHandlerकर दिया गया है, ताकि एपीआई की भूमिकाओं के बारे में ज़्यादा जानकारी दी जा सके. इस बदलाव से, मल्टी-स्टेज नेविगेशन के जेस्चर को हैंडल करने के लिए क्लास के मकसद के बारे में बेहतर तरीके से पता चलता है. इससे जुड़ाaddCallbackतरीका अबaddHandlerहै. (I2492a, b/443040331)
गड़बड़ियां ठीक की गईं
- फ़ॉरवर्ड नेविगेशन पर बैक फ़ॉलबैक को चलने से रोकता है. (I74814, b/436248290)
- आगे की ओर अनुमानित नेविगेशन के लिए सहायता जोड़ी गई.
NavigationEventअब एपीआई, आगे और पीछे जाने के जेस्चर (स्पर्श) को हैंडल करते हैं. इससे नेविगेशन की दोनों दिशाओं के लिए एक जैसे ऐनिमेशन चालू किए जा सकते हैं. (Idc98c, b/436248290) - जब किसी चाइल्ड
NavigationEventDispatcherOwnerको हटाया जाता है, तो रीकंपोज़िशन के दौरानIllegalStateExceptionक्रैश होने से रोकता है. (Iff50c, b/412629020) - पैसिव लिसनर अब बैक बटन दबाकर, पूरी नेविगेशन बैक स्टैक को ऐक्सेस कर सकते हैं. इसके लिए, बैक बटन की जानकारी को एक साथ दिखाया जाता है. इससे यूज़र इंटरफ़ेस (यूआई), सबसे ऊपर मौजूद कॉलबैक तक सीमित रहने के बजाय, झलकियां और नेस्ट किए गए नेविगेशन इतिहास को रेंडर कर सकते हैं. (I7a510, b/436248277)
वर्शन 1.0.0-alpha07
27 अगस्त, 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha07 रिलीज़ हो गया है. वर्शन 1.0.0-alpha07 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
NavigationEventDispatcher.onHasEnabledCallbacksChangedको हटाएं. (I50e97)NavigationEventCallback.onEventCompleted()को ऐब्सट्रैक्ट बनाया गया. (I36b38)NavigationEventCallback#on*तरीकों कोprotectedमें बदलें. इन्हें ओवरराइड करने के लिए, कॉलिंग कोड अपडेट करें. (I6b691)DirectNavigationEventInputफ़ंक्शन का नाम बदलें. (Iffb62)NavigationEventInput.onAttachका नाम बदलकरonAddedकरें. (I2d0b8)NavigationEventInput.onDetachका नाम बदलकरonRemovedकरें. (I2d0b8)NavigationEventInputHandlerका नाम बदलकरNavigationEventInputकरें. (I676a4)NavigationEventInput.onHasEnabledCallbacksChangedमें@EmptySuperजोड़ें. (If9853)NavigationEventInputHandlerमेंonAttachलागू करें. (I03648)NavigationEventInputHandlerमेंonDetachलागू करें. (I03648)- डिफ़ॉल्ट रूप से,
NavigationEventCallbackको चालू किया जाता है. (Ic0188) NavigationEventInput.addOnHasEnabledCallbacksChangedCallbackकोNavigationEventInput.onHasEnabledCallbacksChangedसे बदलें. (I64e93)NavigationEventDispatcher.addInputके लिए मुख्य थ्रेड की ज़रूरत होती है. (Ic2930)NavigationEventDispatcher.removeInputके लिए मुख्य थ्रेड की ज़रूरत होती है. (Ic2930)Dispatcher.addOnHasEnabledCallbacksChangedCallbackको हटाएं.Dispatcher.onHasEnabledCallbacksChangedसे बदलें. (Ida3e3, b/436530096)
गड़बड़ियां ठीक की गईं
- उस गड़बड़ी को ठीक किया गया है जिसमें पहले से अटैच किए गए हैंडलर को जोड़ने या अटैच नहीं किए गए हैंडलर को हटाने पर, लाइफ़साइकल की गलत लॉजिक ट्रिगर होती थी. (I9e47b)
वर्शन 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.progressNavigationEventDispatcherOwnerकंपोज़ेबल जोड़कर,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अब नईabstractNavigationInputHandlerकी सुविधा देता है. (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आर्टफ़ैक्ट, सभी केएमपी टारगेट के साथ काम कर पाता है. (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)NavigationEventCompose ने एक नईLocalNavigationEventDispatcherOwnerलोकल कंपोज़िशन जोड़ी है. यह एक ऐसी वैल्यू दिखाता है जो शून्य हो सकती है, ताकि यह बेहतर तरीके से तय किया जा सके कि यह मौजूदा कंपोज़िशन में उपलब्ध है या नहीं. अगर मालिक का खाता नहीं मिलता है, तो अबNavigationEventHandlerगड़बड़ी का मैसेज दिखाएगा. (62ffda)NavigationEventCompose में, (अनुमानित बैक जेस्चर) इवेंट को हैंडल करने के लिए, नयाNavigationEventHandlerकंपोज़ेबल जोड़ा गया है. यह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-फ़र्स्ट एपीआई उपलब्ध कराती है.NavigationEventDispatcher, एक या उससे ज़्यादाNavigationEventCallbackइंस्टेंस को रजिस्टर करने के लिए एक सामान्य एपीआई के तौर पर काम करता है, ताकि सिस्टम बैक इवेंट मिल सकें.- यह लेयर,
androidx.activityमें पहले रिलीज़ किए गए एपीआई के नीचे मौजूद होती है. इसका मकसद, ज़्यादा लेवल वाले कॉम्पोनेंट में Activity API का इस्तेमाल करने या Android फ़्रेमवर्कOnBackInvokedDispatcherAPI का सीधे तौर पर इस्तेमाल करने के बजाय, कम राय वाला विकल्प उपलब्ध कराना है. Activity 1.12.0-alpha01 के तहत,androidx.activityएपीआई को नेविगेशन इवेंट एपीआई के आधार पर फिर से लिखा गया है.