رویداد ناوبری
| آخرین به روز رسانی | انتشار پایدار | کاندید را آزاد کنید | نسخه بتا | انتشار آلفا |
|---|---|---|---|---|
| 8 اکتبر 2025 | - | - | 1.0.0-beta01 | - |
اعلام وابستگی ها
برای افزودن یک وابستگی به navigationevent، باید مخزن Google Maven را به پروژه خود اضافه کنید. برای اطلاعات بیشتر، مخزن Maven Google را بخوانید.
وابستگیهای مصنوعات مورد نیاز خود را در فایل build.gradle برای برنامه یا ماژول خود اضافه کنید:
شیار
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-beta01" }
کاتلین
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-beta01") }
برای اطلاعات بیشتر درباره وابستگیها، به افزودن وابستگیهای ساخت نگاه کنید.
بازخورد
بازخورد شما به بهتر شدن Jetpack کمک می کند. اگر مسائل جدیدی کشف کردید یا ایده هایی برای بهبود این کتابخانه دارید، به ما اطلاع دهید. لطفاً قبل از ایجاد کتابخانه جدید، به مسائل موجود در این کتابخانه نگاهی بیندازید. با کلیک کردن روی دکمه ستاره می توانید رای خود را به یک موضوع موجود اضافه کنید.
برای اطلاعات بیشتر به مستندات ردیاب مشکل مراجعه کنید.
هیچ یادداشت انتشار برای این مصنوع وجود ندارد.
نسخه 1.0
نسخه 1.0.0-beta01
08 اکتبر 2025
androidx.navigationevent:navigationevent-*:1.0.0-beta01 منتشر شد. نسخه 1.0.0-beta01 حاوی این تعهدات است.
تغییرات API
- حاشیه نویسی
FloatRangeبرایNavigationEvent.touchXوNavigationEvent.touchYتصحیح کنید. این مقادیر مختصات پیکسل مطلق را نشان می دهند و کران بالایی1.0ندارند. ( I4b205 , b/445989313 ) -
NavigationEventDispatcherOwnerقابل تنظیم را برایrememberNavigationEventDispatcherOwnerتغییر دهید. این تابع اکنون به طور مستقیمNavigationEventDispatcherOwnerبرمی گرداند. برای ارائه این مالک به یک ترکیب فرعی، ازCompositionLocalProviderاستفاده کنید. ( I874b2 , b/444446629 )
نسخه 1.0.0-alpha09
24 سپتامبر 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha09 منتشر شد. نسخه 1.0.0-alpha09 حاوی این تعهدات است.
تغییرات API
- به جای نمونه سازی
Idle()مستقیماً از شی singletonNavigationEventTransitionState.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(...)جایگزین شد. پاسخ تماس جدیدonHistoryChanged(history: NavigationEventHistory)را برای دریافت بهروزرسانیها بهعنوان یک شیء منفردNavigationEventHistoryاجرا کنید. ( I23e0b , b/444734264 ) - یک
NavigationEventDispatcher.historyStateFlowجهانی جدید را معرفی کنید. این جریان غیرعمومی به ناظران اجازه می دهد تا فقط در تغییرات پشته ناوبری مشترک شوند و در طول پیشرفت ژست ثابت می ماند. این همتایtransitionStateاست. ( I1db10 , b/444734264 ) - یک
NavigationEventDispatcher.transitionStateStateFlowجهانی جدید را معرفی کنید. این جریان غیرعمومی به ناظران اجازه میدهد که فقط در حالت حرکت فیزیکی (بیکار/در حال پیشرفت)، جدا از تاریخچه مشترک شوند. ( I171fa , b/444734264 ) - کلاس
NavigationEventHistoryStateرا معرفی کنید. این به عنوان API اصلی برای مشاهده تاریخچه اطلاعات ناوبری، جدا از وضعیت حرکت عمل می کند. ( I81ca5 , b/444734264 ) -
NavigationEventاکنون بهعنوان@Immutableعلامتگذاری شده است و به Compose Compiler اجازه میدهد تا ترکیبهای مجدد را بهینه کند. ( If78c7 , b/444734264 ) - APIهای کنترل کننده
navigationevent-composeبه روز می شوند.NavigationEventHandlerوNavigationBackHandler(و انواع مختلف) اکنون از اضافهبار جدیدی پشتیبانی میکنند کهNavigationEventStateرا میپذیرد. اضافه بارهای ساده (دریافتcurrentInfo) حفظ می شوند و اکنون از این مدل حالت جدید به صورت داخلی استفاده می کنند. ( IC3251 , b/444734264 ) - دارنده وضعیت جدید
@StableNavigationEventState<T>را به کتابخانهnavigationevent-composeاضافه کنید. این شیء تاریخچه محلی را با حالت اشاره محلی ترکیب می کند و پیوند اصلی بینrememberNavigationEventStateوNavigationEventHandlerخواهد بود. ( Ifb69f , b/444734264 ) - یک ویژگی
transitionState: TransitionStateعمومی و فقط خواندنی جدید بهNavigationEventHandlerاضافه کنید. کنترل کننده ها اکنون حالت گذار خود را حفظ می کنند که سیستم های خارجی می توانند آن را مشاهده کنند. ( I9acd2 , b/444734264 ) - کلاس جدید
TransitionStatesealed را معرفی کنید. این به عنوان API اصلی برای مشاهده وضعیت حرکت، جدا از تاریخچه پیمایش عمل می کند. ( ID4beb , b/444734264 ) -
currentInfo،backInfoوforwardInfoبهعنوان ویژگیهای عمومی و فقط خواندنی درNavigationEventHandlerنمایش دهید. ( Ia7636 , b/444734264 ) - پیاده سازی های
NavigationEventHandlerاکنون باید یکinitialInfo: Tاولیه را به سازنده پایه ارائه دهند. ( Idcfea , b/444734264 ) -
OnBackInvokedInputباOnBackInvokedOverlayInputیاOnBackInvokedDefaultInputجایگزین کنید. ( I5323f , b/428948766 ) -
NavigationEventStateبهعنوان@Immutableعلامتگذاری کنید. این کار با اطمینان از اینکه Composables با مشاهده این حالت می تواند به درستی از ترکیب مجدد رد شود، عملکرد Compose را بهبود می بخشد. ( I399c8 ) - تغییر نام
NavigationEventInfo.NotProvidedبهNavigationEventInfo.None;به روز رسانی مراجع بدون تغییر رفتار ( I5e2d4 ) -
NavigationEventInfoاکنون بهعنوان@Immutableعلامتگذاری شده است و به Compose Compiler اجازه میدهد تا ترکیبهای مجدد را بهینه کند. ( I7c112 ) - ارگونومی جاوا را با رابط سرگرمکننده برای تکمیل مجدد بهبود دهید. ( I8a860 )
- تغییر نام
onHasEnabledHandlerChangedبهonHasEnabledHandlersChanged. این روشن میکند که تماس برگشتی وضعیت فعالسازی جمعی همه کنترلکنندهها را گزارش میکند، نه فقط یک. ( I1af61 , b/443711297 ) - حذف
hasEnabledHandler()ازNavigationEventDispatcher;به جای آن ازNavigationEventInput.onHasEnabledHandlersChangedاستفاده کنید. ( IDef72 , b/443711297 ) - پاسخ تماس
onInfoChangedبهNavigationEventInputاضافه کنید تا شنوندگان را از تغییرات در تاریخچه پیمایش مطلع کنید. این زمینه کامل پشته های جاری، عقب و جلو را فراهم می کند و ورودی ها را قادر می سازد به اطلاعات متنی واکنش نشان دهند. ( I69a8b , b/443282983 ) -
swipeEdgeNavigationEventرا به@IntDefتبدیل کنید ( Icee54 , b/443950342 ) - یک پارامتر
priorityرا بهNavigationEventDispatcher.addInputاضافه کنید تا یک توزیع کننده را به یک اولویت اختصاص دهید. رویدادهایی مانندonHasEnabledCallbacksChangedاکنون تنها زمانی فعال میشوند که پاسخهای تماس در آن اولویت تغییر کنند. ( I3e488 , b/443711297 ) - برای وضوح، نام پارامتر
NavigationEventDispatcherرا ازparentDispatcherبه والد تغییر دهید. ( Id4f1f , b/443801782 ) - حذف
NavigationEventPriorityبه نفع@IntDefبرای کاربران جاوا ( I10a9f ، b/440514265 ) - اجرای قرارداد ناوبری. اگر
NavigationEventHandlerشماisBackEnabledیاisForwardEnabledرویtrueتنظیم می کند، اکنون باید به ترتیبonBackCompletedیاonForwardCompletedلغو کنید. پیاده سازی های پیش فرض اکنون یک استثنا برای جلوگیری از خرابی های بی صدا ایجاد می کنند. ( I17c62 ) - هنگام اضافه کردن کنترل کننده رویدادهای پیمایش، مقادیر اولویت معتبر را اعمال کنید. تماس با
addHandlerبا اولویت پشتیبانینشده، اکنون یکIllegalArgumentExceptionایجاد میکند و بازخورد فوری برای استفاده نادرست در همه پلتفرمهای هدف ارائه میکند. ( I3c474 )
رفع اشکال
-
addHandlerرا idempotent کنید. ثبت نام های تکراری را نادیده بگیرید ( 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 حاوی این تعهدات است.
ویژگی های جدید
- یک API
NavigationEventHandlerمبتنی بر lambda را معرفی کنید که جایگزین کنترل کننده مبتنی بر Flow شود. به جای جمعآوری جریانها، کاهش صفحه دیگ بخار و اجتناب از مشکلات لغو، با ژستهای برگشت و جلو با تماسهای ساده برخورد کنید.NavigationBackHandlerوNavigationForwardHandlerبه عنوان APIهای راحتی هدفمند ارائه دهید. حذفNavigationEventHandlerمبتنی بر جریان. به تماس های جدید مهاجرت کنید. ( I23bac , b/436248277 ) - به شنوندگان غیرفعال اجازه دهید از طریق اطلاعات پشتی ترکیبی به پشته ناوبری کامل دسترسی داشته باشند. رابطهای کاربری را فعال کنید تا پیشنمایشها و تاریخچه پیمایش تودرتو را بهجای محدود شدن به بالاترین پاسخ به تماس، ارائه دهند. ( I7a510 , b/436248277 )
- برای روشن کردن وضعیت ناوبری و پشتیبانی از ناوبری رو به جلو با کنترلکنندههای تودرتو، یک مدل صریح برگشت/جریان/جلو معرفی کنید. ( Ib86da , b/420443609 )
- روشهای
onForward*را اضافه کنید و بهNavigationEventCallbackisForwardEnabled. ( Ic100f , b/436248290 ) - پشتیبانی ناوبری رو به جلو را به
NavigationEventInputاضافه کنید. ( I5734b )
تغییرات API
- تست رویدادهای پیمایش رو به جلو را با
TestNavigationEventCallbackفعال کنید. از قلابهایisForwardEnabledوonForward*استفاده کنید. ( I21fb5 , b/420443609 ) - در
NavEventنام تماسهایonEvent*را بهonBack*تغییر دهید. ( I228b3 , b/436248290 ) -
SwipeEdgeبه یک کلاس درون خطی تبدیل کنید. ( ID5e01 ) - کتابخانه
navigationeventرا با جاوا سازگار کنید. همه APIهای عمومی اکنون به طور کامل از طریق کد جاوا در دسترس هستند و امکان ادغام یکپارچه با پروژه های مختلط زبان یا فقط جاوا را فراهم می کنند. ( Ibc944 , I5465f , I9fb1e , b/440532890 b/443040294 ) - با تغییر نام
NavigationEventCallbackبهNavigationEventHandler، نقشهای API را روشن کنید. این تغییر هدف کلاس از مدیریت حرکات ناوبری چند مرحله ای را بهتر منعکس می کند. روشaddCallbackمربوطه اکنونaddHandlerاست. ( I2492a , b/443040331 )
رفع اشکال
- از اجرای برگشت برگشتی در مسیریابی رو به جلو جلوگیری کنید. ( I74814 , b/436248290 )
- برای ناوبری رو به جلو پیش بینی پشتیبانی اضافه کنید. APIهای
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 حاوی این commit ها است.
تغییرات API
-
NavigationEventDispatcher.onHasEnabledCallbacksChangedرا حذف کنید. ( I50e97 ) -
NavigationEventCallback.onEventCompleted()انتزاعی کنید. ( I36b38 ) - متدهای
NavigationEventCallback#on*بهprotectedتغییر دهید. کد تماس را بهروزرسانی کنید تا آنها را لغو کنید. ( I6b691 ) - تغییر نام توابع
DirectNavigationEventInput. ( Iffb62 ) - تغییر نام
NavigationEventInput.onAttachبهonAdded. ( I2d0b8 ) - تغییر نام
NavigationEventInput.onDetachبهonRemoved. ( I2d0b8 ) - تغییر نام
NavigationEventInputHandlerبهNavigationEventInput. ( I676a4 ) -
@EmptySuperبهNavigationEventInput.onHasEnabledCallbacksChangedاضافه کنید. ( If9853 ) - پیاده سازی
onAttachدرNavigationEventInputHandler. ( I03648 ) -
onDetachدرNavigationEventInputHandlerپیاده سازی کنید. ( 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را میپذیرد، و آن را به 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برای ایجاد، پیوند دادن و دفع نمونه های
NavigationEventDispatcherبه صورت سلسله مراتبیNavigationEventDispatcherOwnerاضافه کنید. کنترل پویا وضعیت فعال توزیع کننده و پاکسازی خودکار را فعال کنید.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
تغییرات API
- پارامتر
isPassthroughازNavigationEventCallbackحذف شده است. ( I99028 , b/424470518 ) - سازندگان
NavigationEventStateاکنون داخلی هستند. برای آزمایش، وضعیت (پیشفرض بهIdle) را از طریقDirectNavigationEventInputHandlerبهروزرسانی کنید. برای تنظیم وضعیت رویInProgress،handleOnStartedیاhandleOnProgressedو برای برگرداندن آن بهIdlehandleOnCompletedیاhandleOnCancelledفراخوانی کنید. برای به روز رسانیNavigationEventInfo، ازNavigationEventCallback.setInfoاستفاده کنید. ( I93dca , b/424470518 ) - پارامترهای پیشفرض را به
NavigationEventاضافه کرد تا امکان نمونهسازی آسانتر و سادهسازی آزمایش را فراهم کند که باید به جایTestNavigationEventاستفاده شود. ( I5dc49 , I232f4 ) - یک
TestNavigationEventCallbackبرای آزمایش رویدادهای ناوبری با وضعیتهای خاص فعلی/قبلی اضافه شد. ( Idd22e , b/424470518 ) -
NavigationEventInputHandlerبه یک کلاس انتزاعی تبدیل شده است تا جایگزینAbstractNavigationEventInputHandlerقبلی با پیاده سازی درDirectNavigationEventInputHandlerشود ( Iadde5 , Ifed40 I3897c , b/432616296 , b/435416924 ) - توابع
send*درNavigationEventInputHandlerپیشوندهایشان بهhandle*تغییر نام داده اند. ( Iffcaf ) -
OnBackInvokedInputHandlerاکنونabstractجدیدNavigationInputHandlerگسترش می دهد. ( Ib45aa ) -
NavigationEventDispatcherOwnerرا تغییر داد تا به یک توزیع کننده والد نیاز داشته باشد که در آن باید صریحاًnullرا برای ایجاد یک توزیع کننده ریشه ارسال کنید. ( Ia6f64 , b/431534103 )
رفع اشکال
- با اجتناب از کپی های مجموعه در
NavigationEventDispatcher.dispose()کارایی بهبود یافته است. ( I4ab09 ) - مشکلی را که در آن
NavigationEventHandlerبه تغییرات در حالت فعال خود به درستی پاسخ نمیدهد، برطرف شد. ( Ia5268 , I19bec , I5be5c , b/431534103 )
به روز رسانی Docs
- KDocs برای
NavigationEventگسترش یافت تا نقش خود را به عنوان یک پوشش رویداد یکپارچه و رفتار ویژگی جزئیات در انواع مختلف پیمایش (ژستها، کلیکها) روشن کند. ( I91e8d ) - اسناد بهروزرسانی شده برای مدیریت برگشت سیستم، 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 تنظیم شود، به طور خودکار همه توزیع کننده های نسل خود را غیرفعال می کند. این ویژگی باعث می شود تا کل شاخه های سیستم رویداد ناوبری به طور موثر خاموش شوند. ( 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() برای پاکسازی مناسب توزیع کنندگان و فرزندانشان معرفی شده است. فراخوانی 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 Composable جدید معرفی خواهیم کرد که به طور خودکار یک توزیع کننده فرزند را در Compose UI در aosp/3692572 مدیریت می کند. با این حال، این تغییر به نسخه فعلی وارد نشد و برای نسخه بعدی برنامه ریزی شده است.
کتابخانه تست ناوبری
- ماژول
navigationevent-testingرا برای ارائه ابزارهای آزمایشی اختصاصی برای کتابخانهnavigationeventاضافه کنید. ( 0e50b6 ) - کلاس ابزار جعلی
TestNavigationEventCallbackبرای آزمایش اضافه کنید. تماسهای روش برگشت به تماس را ضبط میکند و موارد دریافتیNavigationEventرا برای پشتیبانی از تأیید ذخیره میکند. ( 4a0246 ) - برای ایجاد نمونههای
NavigationEventبا مقادیر پیشفرض، تابع ابزار جعلیTestNavigationEventرا اضافه کنید و آزمایشهای واحد را برای پردازش رویدادهای ناوبری ساده کنید. ( 3b63f5 ) - کلاس ابزار جعلی
TestNavigationEventDispatcherOwnerبرای آزمایش اضافه کنید. برای پشتیبانی از تأیید تعامل در آزمایشها، تعداد رویدادهای بازگشتی و تغییر حالت فعال را دنبال میکند. ( c8753e )
تغییرات API
-
NavigationEventInputHandlerازandroidMainبهcommonMainمنتقل کنید تا در کد رایج KMP در دسترس قرار گیرد. روشهایpublic send*جدید را برای ارسال رویدادها اضافه کنید. تغییر توابع ارسال درNavigationEventDispatcherازpublicبهinternal. کاربران اکنون باید ازNavigationEventInputHandlerبرای ارسال رویدادها استفاده کنند. ( Ia7114 ) - تغییر نام
NavigationInputHandlerبهOnBackInvokedInputHandler. ( I63405 )
رفع اشکال
- Refactor
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 برای اطمینان از تولید صحیح خرد. هیچ تاثیری بر 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 ) -
NavigationEventCompose یک ترکیب محلیLocalNavigationEventDispatcherOwnerجدید اضافه کرده است. برای تعیین بهتر اینکه آیا در ترکیب فعلی موجود است یا خیر، یک مقدار nullable برمی گرداند. اکنون اگر مالک اصلی پیدا نشود،NavigationEventHandlerخطایی ایجاد می کند. ( 62ffda ) -
NavigationEventCompose یکNavigationEventHandlerComposable جدید اضافه کرده است تا رویدادها را مدیریت کند. این یکFlowاز اشیاءNavigationEventارائه می دهد که باید در لامبدای معلقی که ارائه می کنید 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یک KMP-first API برای کنترل سیستم و همچنین Predictive Back ارائه میکند.NavigationEventDispatcherبه عنوان یک API رایج برای ثبت یک یا چند نمونهNavigationEventCallbackبرای دریافت رویدادهای برگشت سیستم عمل می کند. - این لایه در زیر APIهای منتشر شده قبلی در
androidx.activityقرار دارد و هدف آن این است که جایگزینی با نظر کمتر برای استفاده از APIهای Activity در اجزای سطح بالاتر یا استفاده مستقیم از چارچوب AndroidOnBackInvokedDispatcherAPIها باشد. APIهایandroidx.activityدر بالای APIهای رویداد ناوبری به عنوان بخشی از Activity 1.12.0-alpha01 بازنویسی شدهاند.