رویداد ناوبری
| آخرین بهروزرسانی | انتشار پایدار | کاندیدای انتشار | انتشار بتا | انتشار آلفا |
|---|---|---|---|---|
| ۵ نوامبر ۲۰۲۵ | - | ۱.۰.۰-rc01 | - | - |
اعلام وابستگیها
برای افزودن وابستگی به navigationevent، باید مخزن Google Maven را به پروژه خود اضافه کنید. برای اطلاعات بیشتر، مخزن Google's Maven را مطالعه کنید.
وابستگیهای مربوط به مصنوعات مورد نیاز خود را در فایل build.gradle برای برنامه یا ماژول خود اضافه کنید:
شیار
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-rc01" }
کاتلین
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-rc01") }
برای اطلاعات بیشتر در مورد وابستگیها، به «افزودن وابستگیهای ساخت» مراجعه کنید.
بازخورد
بازخورد شما به بهبود Jetpack کمک میکند. اگر مشکلات جدیدی کشف کردید یا ایدههایی برای بهبود این کتابخانه دارید، به ما اطلاع دهید. لطفاً قبل از ایجاد یک کتابخانه جدید، نگاهی به مشکلات موجود در این کتابخانه بیندازید. میتوانید با کلیک بر روی دکمه ستاره، رأی خود را به یک مشکل موجود اضافه کنید.
برای اطلاعات بیشتر به مستندات ردیاب مشکل مراجعه کنید.
هیچ یادداشت انتشاری برای این مصنوع وجود ندارد.
نسخه ۱.۰
نسخه ۱.۰.۰-rc01
۵ نوامبر ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-rc01 منتشر شد. نسخه 1.0.0-rc01 شامل این کامیتها است.
نسخه ۱.۰.۰-بتا۰۱
۸ اکتبر ۲۰۲۵
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را مستقیماً برمیگرداند. برای ارائه این مالک به یک sub-composition، ازCompositionLocalProviderاستفاده کنید. ( I874b2 , b/444446629 )
نسخه ۱.۰.۰-آلفا۰۹
۲۴ سپتامبر ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-alpha09 منتشر شد. نسخه 1.0.0-alpha09 شامل این کامیتها است.
تغییرات API
- به جای نمونهسازی
Idle()مستقیماً از شیء تکلایهNavigationEventTransitionState.Idleاستفاده کنید. ( Ic7d9e ، b/444734264 ) - سازندههای کمکی را داخلی کنید؛ نمونهها را از طریق public
NavigationEventDispatcher.historyبه جای ساخت مستقیم دریافت کنید. ( I3b7e0 , b/444734264 ) - نیاز به ایجاد
NavigationEventStateاز طریقrememberNavigationEventState؛ سازنده اکنون داخلی است. ( Ie143c ، b/444734264 ) - تابع
onBackCompletedFallbackجایگزین تابعfallbackOnBackPressedو پارامتر سازنده میشود. رفتار آن بدون تغییر باقی میماند؛ فقط در رویدادهای back که تکمیل و مدیریت نشدهاند، فراخوانی میشود. ( Idabe9 ، b/444734264 ) - سازنده اصلی
NavigationEventHistory(mergedHistory, currentIndex)اکنونinternalاست. مصرفکنندگان خارجی باید از سازندههای عمومی (یا سازنده خالی یا سازنده مبتنی بر پارتیشن) برای ایجاد نمونهها استفاده کنند. ( I1c047 ، b/444734264 ) - تابع
View.setViewTreeNavigationEventDispatcherOwnerطوری تنظیم کنید که مالک nullable ( 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 ) - یک جریان
StateFlowسراسری جدید به نامNavigationEventDispatcher.historyمعرفی کنید. این جریان غیر ژنریک به ناظران اجازه میدهد فقط در تغییرات پشته ناوبری مشترک شوند و در طول پیشرفت ژستها پایدار میماند. این معادلtransitionStateاست. ( I1db10 , b/444734264 ) - یک
NavigationEventDispatcher.transitionStateStateFlowسراسری جدید معرفی کنید. این جریان غیر ژنریک به ناظران اجازه میدهد فقط در حالت ژست فیزیکی (Idle/InProgress) مشترک شوند، جدا از تاریخچه. ( I171fa , b/444734264 ) - کلاس
NavigationEventHistoryStateرا معرفی کنید. این کلاس به عنوان API اصلی برای مشاهده تاریخچه اطلاعات ناوبری، جدا از وضعیت ژستها، عمل خواهد کرد. ( I81ca5 ، b/444734264 ) -
NavigationEventاکنون به عنوان@Immutableعلامتگذاری شده است و به کامپایلر Compose اجازه میدهد تا ترکیببندیهای مجدد را بهینه کند. ( If78c7 , b/444734264 ) - رابطهای برنامهنویسی (API) مربوط به مدیریتکنندهی
navigationevent-composeبهروزرسانی شدهاند.NavigationEventHandlerوNavigationBackHandler(و انواع دیگر) اکنون از یک overload جدید پشتیبانی میکنند که یکNavigationEventStateرا که به صورت hoist شده است، میپذیرد. overloadهای ساده (با گرفتنcurrentInfo) حفظ شده و اکنون از این مدل state جدید به صورت داخلی استفاده میکنند. ( Ic3251 ، b/444734264 ) - نگهدارنده وضعیت جدید
@StableNavigationEventState<T> را به کتابخانهnavigationevent-composeاضافه کنید. این شیء تاریخچه محلی را با وضعیت ژست محلی ترکیب میکند و پیوند اصلی بینrememberNavigationEventStateوNavigationEventHandlerخواهد بود. ( Ifb69f ، b/444734264 ) - یک ویژگی عمومی و فقط خواندنی جدید به نام
transitionState: TransitionStateبهNavigationEventHandlerاضافه کنید. اکنون کنترلکنندهها حالت گذار خود را حفظ میکنند که سیستمهای خارجی میتوانند آن را مشاهده کنند. ( I9acd2 ، b/444734264 ) - کلاس جدید
TransitionStateرا معرفی کنید. این کلاس به عنوان 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علامتگذاری کنید. این کار با اطمینان از اینکه Composableهایی که این حالت را مشاهده میکنند میتوانند به درستی از ترکیب مجدد صرف نظر کنند، عملکرد Compose را بهبود میبخشد. ( I399c8 ) - تغییر نام
NavigationEventInfo.NotProvidedبهNavigationEventInfo.None;بهروزرسانی ارجاعها. بدون تغییر رفتار. ( I5e2d4 ) -
NavigationEventInfoاکنون به عنوان@Immutableعلامتگذاری شده است و به کامپایلر Compose اجازه میدهد تا ترکیببندیهای مجدد را بهینه کند. ( I7c112 ) - بهبود ارگونومی جاوا با رابط کاربری سرگرمکننده برای پشتیبانی از تکمیل کد به عقب ( I8a860 )
- تغییر نام
onHasEnabledHandlerChangedبهonHasEnabledHandlersChanged. این روشن میکند که callback وضعیت فعالسازی جمعی همه handlerها را گزارش میدهد، نه فقط یکی را. ( I1af61 ، b/443711297 ) -
hasEnabledHandler()ازNavigationEventDispatcher;به جای آن ازNavigationEventInput.onHasEnabledHandlersChangedاستفاده کنید. ( Idef72 ، b/443711297 ) - تابع
onInfoChangedبهNavigationEventInputاضافه کنید تا شنوندگان را از تغییرات در تاریخچه ناوبری مطلع کنید. این کار زمینه کامل پشتههای فعلی، قبلی و بعدی را فراهم میکند و Inputs را قادر میسازد تا به اطلاعات زمینهای واکنش نشان دهند. ( I69a8b , b/443282983 ) -
swipeEdgeمربوط بهNavigationEventرا به یک@IntDefتبدیل کنید ( Icee54 , b/443950342 ) - یک پارامتر
priorityبهNavigationEventDispatcher.addInputاضافه کنید تا یک dispatcher را به یک اولویت محدود کنید؛ رویدادهایی مانندonHasEnabledCallbacksChangedاکنون فقط زمانی اجرا میشوند که فراخوانیهای با آن اولویت تغییر کنند. ( I3e488 ، b/443711297 ) - برای وضوح بیشتر، نام پارامتر
NavigationEventDispatcherازparentDispatcherبه parent تغییر دهید. ( Id4f1f ، b/443801782 ) - برای کاربران جاوا،
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 )
نسخه ۱.۰.۰-آلفا۰۸
۱۰ سپتامبر ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-alpha08 منتشر شد. نسخه 1.0.0-alpha08 شامل این کامیتها است.
ویژگیهای جدید
- یک API مبتنی بر Lambda به نام
NavigationEventHandlerمعرفی کنید که جایگزین کنترلکننده مبتنی بر Flow شود. حرکات عقب و جلو را به جای جمعآوری جریانها، با فراخوانیهای ساده مدیریت کنید، که باعث کاهش کدهای تکراری و جلوگیری از مشکلات لغو میشود.NavigationBackHandlerوNavigationForwardHandlerبه عنوان APIهای هدفمند و راحت ارائه دهید.NavigationEventHandlerمبتنی بر Flow را حذف کنید؛ به فراخوانیهای جدید مهاجرت کنید. ( I23bac , b/436248277 ) - به شنوندههای غیرفعال اجازه دهید از طریق اطلاعات ترکیبی به کل پشته ناوبری دسترسی داشته باشند. به رابطهای کاربری اجازه دهید به جای محدود شدن به بالاترین فراخوانی، پیشنمایشها و تاریخچه ناوبری تو در تو را رندر کنند. ( I7a510 ، b/436248277 )
- یک مدل صریح برگشت/جریان/جلو برای روشن کردن وضعیت ناوبری و پشتیبانی از ناوبری رو به جلو با هندلرهای تو در تو معرفی کنید. ( Ib86da , b/420443609 )
- متدهای
onForward*وisForwardEnabledبهNavigationEventCallbackاضافه کنید. ( Ic100f ، b/436248290 ) - پشتیبانی از ناوبری رو به جلو را به
NavigationEventInputاضافه کنید. ( I5734b )
تغییرات API
- فعال کردن تست رویدادهای ناوبری رو به جلو با
TestNavigationEventCallback. استفاده از قلابهایisForwardEnabledوonForward*. ( I21fb5 ، b/420443609 ) - فراخوانیهای
onEvent*را درNavEventبهonBack*تغییر نام دهید. ( I228b3 ، b/436248290 ) - تبدیل
SwipeEdgeبه یک کلاس درونخطی. ( Id5e01 ) - کتابخانه
navigationeventرا با جاوا سازگار کنید. اکنون همه API های عمومی از طریق کد جاوا کاملاً قابل دسترسی هستند و امکان ادغام یکپارچه در پروژههای چندزبانه یا فقط جاوا را فراهم میکنند. ( Ibc944 , I5465f , I9fb1e , b/440532890 b/443040294 ) - با تغییر نام
NavigationEventCallbackبهNavigationEventHandlerنقشهای API را روشن کنید. این تغییر، هدف کلاس از مدیریت حرکات ناوبری چند مرحلهای را بهتر منعکس میکند. متدaddCallbackمربوطه اکنونaddHandlerاست. ( I2492a ، b/443040331 )
رفع اشکالات
- جلوگیری از اجرای back fallback در ناوبری رو به جلو. ( I74814 ، b/436248290 )
- پشتیبانی از ناوبری پیشبینانه رو به جلو اضافه شد. APIهای
NavigationEventاکنون هر دو حرکت عقب و جلو را مدیریت میکنند و انیمیشنهای ثابتی را برای هر دو جهت ناوبری فعال میکنند. ( Idc98c ، b/436248290 ) - جلوگیری از بروز خطای
IllegalStateExceptionدر هنگام ترکیب مجدد کد، زمانی که یک فرزندNavigationEventDispatcherOwnerحذف میشود. ( Iff50c ، b/412629020 ) - شنوندگان غیرفعال اکنون میتوانند از طریق اطلاعات ترکیبی به کل پشته ناوبری دسترسی داشته باشند و رابطهای کاربری را قادر میسازند تا پیشنمایشها و تاریخچه ناوبری تو در تو را رندر کنند، به جای اینکه به بالاترین فراخوانی پاسخ محدود شوند. ( I7a510 ، b/436248277 )
نسخه ۱.۰.۰-آلفا۰۷
۲۷ آگوست ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-alpha07 منتشر شد. نسخه 1.0.0-alpha07 شامل این کامیتها است.
تغییرات API
- حذف
NavigationEventDispatcher.onHasEnabledCallbacksChanged( I50e97 ) -
NavigationEventCallback.onEventCompleted()انتزاعی (abstract) کنید ( I36b38 ). - متدهای
NavigationEventCallback#on*را بهprotectedتغییر دهید. کد فراخوانی را بهروزرسانی کنید تا آنها را بازنویسی کند. ( I6b691 ) - تغییر نام توابع
DirectNavigationEventInput. ( Iffb62 ) - تغییر نام
NavigationEventInput.onAttachبهonAdded( I2d0b8 ) - تغییر نام
NavigationEventInput.onDetachبهonRemoved( I2d0b8 ) - نام
NavigationEventInputHandlerرا بهNavigationEventInputتغییر دهید. ( I676a4 ) -
@EmptySuperبهNavigationEventInput.onHasEnabledCallbacksChangedاضافه کنید. ( اگر ۹۸۵۳ ) - پیادهسازی
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 )
نسخه ۱.۰.۰-alpha06
۱۳ آگوست ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-alpha06 منتشر شد. نسخه 1.0.0-alpha06 شامل این کامیتها است.
ویژگیهای جدید
API شنوندههای غیرفعال
اکنون میتوانید اطلاعات متنی سفارشی را از هر میزبان ناوبری ارسال کنید و به صورت غیرفعال به تغییرات حالت ژست از هر کجای رابط کاربری خود گوش دهید . این امر انیمیشنهای آگاه از متن را برای پیشبینی بازگشت و سایر ناوبریهای مبتنی بر ژست فعال میکند.
این ویژگی دو بخش دارد:
- ارائه اطلاعات - از
NavigationEventInfoبرای حمل دادههای سفارشی استفاده کنید. - مصرف وضعیت - از
dispatcher.state(NavigationEventState) برای مشاهده پیشرفت ژست و زمینه استفاده کنید.
-
NavigationEventCallbackاکنون متدsetInfo(currentInfo, previousInfo)را برای تنظیم زمینه ژست در یک فراخوانی ( I1d5e7 ، b/424470518 ) ارائه میدهد. -
NavigationEventHandlerیک overload جدید اضافه میکند که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به هر رابط کاربری اجازه میدهند تا پیشرفت ژستها و دادههای زمینهای را بدون مدیریت مستقیم رویداد مشاهده کند.
مثال:
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اضافه کنید. کنترل پویای وضعیت فعالشدهی dispatcher و پاکسازی خودکار را فعال کنید.@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اکنون ازNavigationInputHandlerabstractجدید ( Ib45aa ) ارث بری میکند. -
NavigationEventDispatcherOwnerتغییر کرد تا به یک توزیعکنندهی والد نیاز داشته باشد، جایی که برای ایجاد یک توزیعکنندهی ریشه باید صریحاًnullرا ارسال کنید. ( Ia6f64 ، b/431534103 )
رفع اشکالات
- با جلوگیری از کپی کردن مجموعهها در
NavigationEventDispatcher.dispose(). ( I4ab09 ) کارایی بهبود یافته است. - مشکلی که باعث میشد
NavigationEventHandlerبه تغییرات در حالت فعال خود به درستی پاسخ ندهد، برطرف شد. ( Ia5268 ، I19bec ، I5be5c ، b/431534103 )
بهروزرسانیهای اسناد
- KDocs برای
NavigationEventگسترش یافت تا نقش آن را به عنوان یک پوششدهنده رویداد یکپارچه روشن کند و رفتار ویژگی را در انواع مختلف ناوبری (حرکات، کلیکها) به تفصیل شرح دهد. ( I91e8d ) - مستندات مربوط به مدیریت برگشتی سیستم، توسط رابطهای برنامهنویسی Compose (
BackHandler،PredictiveBackHandler،NavigationEventHandler) بهروزرسانی شد تا رفتار مربوط به ترتیب فراخوانی فراخوانیها ( I7ab94 ،) فراخوانی شود.
بهروزرسانی وابستگی
-
NavigationEventاکنون به Compose Runtime 1.9.0-beta03 وابسته است که به شیءnavigationevent-composeاجازه میدهد از تمام اهداف KMP پشتیبانی کند. ( Ia1b87 )
نسخه ۱.۰.۰-آلفا۰۵
۳۰ ژوئیه ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-alpha05 منتشر شد. نسخه 1.0.0-alpha05 شامل این کامیتها است.
پشتیبانی سلسله مراتب والدین-فرزند:
یک NavigationEventDispatcher اکنون میتواند دارای dispatcherهای والد و فرزند باشد که یک ساختار درختی سلسله مراتبی را تشکیل میدهند. این امر با انعکاس سلسله مراتب ساختاری UI از طریق dispatcherهای زنجیرهای، امکان انتشار و مدیریت انعطافپذیرتر رویدادهای ناوبری را در کامپوننتهای پیچیده رابط کاربری 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 امکان کنترل از بالا به پایین یک dispatcher را فراهم میکند. وقتی isEnabled روی یک dispatcher روی false تنظیم شود، به طور خودکار تمام 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ها و فرزندان آنها معرفی شده است. فراخوانی dispose() برای جلوگیری از نشت حافظه، listenerها را متوقف میکند، به صورت بازگشتی همه dispatcherهای فرزند را dispose میکند، همه callbackهای ثبت شده در dispatcher را حذف میکند و آن را از والدش جدا میکند. این تضمین میکند که منابع به درستی آزاد شوند، زمانی که دیگر به dispatcherها نیازی نیست. ( I9e985 )
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
اگر هر متد عمومی در یک dispatcher دارای dispose فراخوانی شود، بلافاصله یک IllegalStateException ایجاد میشود. این امر از خطاهای خاموش جلوگیری میکند و به توسعهدهندگان کمک میکند تا استفاده نادرست را در طول توسعه شناسایی کنند. ( Ic2dc3 )
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
نکته: ما یک NavigationEventDispatcherOwner Composable جدید معرفی خواهیم کرد که به طور خودکار یک child dispatcher را در رابط کاربری Compose در aosp/3692572 مدیریت میکند. با این حال، این تغییر در نسخه فعلی اعمال نشده و برای نسخه بعدی برنامهریزی شده است.
کتابخانه تست ناوبری
- ماژول
navigationevent-testingرا برای ارائه ابزارهای تست اختصاصی برای کتابخانهnavigationeventاضافه کنید. ( 0e50b6 ) - کلاس کاربردی جعلی
TestNavigationEventCallbackبرای آزمایش اضافه کنید. این کلاس فراخوانیهای متد callback را ثبت میکند و آیتمهایNavigationEventدریافتی را برای پشتیبانی از تأیید ذخیره میکند. ( 4a0246 ) - تابع کاربردی جعلی
TestNavigationEventبرای ایجاد نمونههایNavigationEventبا مقادیر پیشفرض اضافه کنید، که تستهای واحد را برای پردازش رویداد ناوبری ساده میکند. ( 3b63f5 ) - کلاس کاربردی جعلی
TestNavigationEventDispatcherOwnerرا برای تست اضافه کنید. این کلاس، تعداد رویدادهای fallback و enabled-state-changed را برای پشتیبانی از تأیید تعامل در تستها، ردیابی میکند. ( c8753e )
تغییرات API
-
NavigationEventInputHandlerازandroidMainبهcommonMainمنتقل کنید تا در کد عمومی KMP در دسترس باشد. متدهایpublic send*جدیدی برای ارسال رویدادها اضافه کنید. توابع dispatch درNavigationEventDispatcherازpublicبهinternalتغییر دهید؛ کاربران اکنون باید ازNavigationEventInputHandlerبرای ارسال رویدادها استفاده کنند. ( Ia7114 ) -
NavigationInputHandlerبهOnBackInvokedInputHandlerتغییر دهید. ( I63405 )
رفع اشکالات
- برای کاهش سربار با اجتناب از تخصیص لیستهای میانی و بهبود عملکرد ارسال فراخوانی
NavigationEventDispatcherاصلاح کنید. ( I82702 ، I1a9d9 ) - حاشیهنویسیهای
@FloatRangeرا به فیلدهایtouchX،touchYوprogressدرNavigationEventاضافه کنید تا محدودههای مقادیر معتبر در زمان کامپایل اعمال شوند و ایمنی API بهبود یابد. ( Iac0ec )
نسخه ۱.۰.۰-آلفا۰۴
۲ ژوئیه ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-alpha04 منتشر شد. نسخه 1.0.0-alpha04 شامل این کامیتها است.
رفع اشکالات
- از
implementedInJetBrainsForkبرایnavigationevent-composeاستفاده شده و یک هدفcommonStubsبرای مطابقت با قراردادهای Compose اضافه شده است. تغییر درخواست شده توسط JetBrains . ( f60c79 ) - رفع مشکل افزونه کامپایلر Compose برای Kotlin/Native برای اطمینان از تولید صحیح stub. هیچ تاثیری بر APIهای عمومی یا رفتار ندارد. ( 1890c9 )
نسخه ۱.۰.۰-آلفا۰۳
۱۸ ژوئن ۲۰۲۵
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در یک زمان ثبت شود؛ اضافه کردن آن به چندین dispatcher باعث ایجادIllegalStateExceptionمیشود. توجه داشته باشید که این رفتار باOnBackPressedDispatcherکه امکان چندین dispatcher را فراهم میکند، متفاوت است. ( e82c19 ) -
isPassThroughیکvalبرای جلوگیری از جهش در حین ناوبری ساخته شده است، که میتواند ارسالNavigationEventرا مختل کند. ( I0b287 )
نسخه ۱.۰.۰-آلفا۰۲
۴ ژوئن ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-alpha02 منتشر شد. نسخه 1.0.0-alpha02 شامل این کامیتها است.
تغییرات API
- سازنده ثانویه
NavigationEventDispatcherرا با آرگومانهای پیشفرض جایگزین کنید. ( I716a0 ) - ویژگی priority را از
NavigationEventCallbackحذف کنید. به جای آن priority را بهNavigationEventDispatcher.addCallback()ارسال کنید. ( I13cae )
رفع اشکالات
- خطای
ConcurrentModificationExceptionکه هنگام فراخوانیNavigationEventCallback.remove()به دلیل تغییر همزمان لیست داخلی closeableها رخ میداد، برطرف شد. ( b/420919815 )
نسخه ۱.۰.۰-آلفا۰۱
۲۰ مه ۲۰۲۵
androidx.navigationevent:navigationevent-*:1.0.0-alpha01 منتشر شد. نسخه 1.0.0-alpha01 شامل این کامیتها است.
ویژگیهای جدید
- کتابخانه
androidx.navigationeventیک API مبتنی بر KMP برای مدیریت بازگشت سیستم و همچنین بازگشت پیشبینیشده ارائه میدهد.NavigationEventDispatcherبه عنوان یک API مشترک برای ثبت یک یا چند نمونهNavigationEventCallbackبرای دریافت رویدادهای بازگشت سیستم عمل میکند. - این لایه زیر APIهای منتشر شده قبلی در
androidx.activityقرار میگیرد و هدف آن جایگزینی کمطرفدارتر برای استفاده از APIهای Activity در کامپوننتهای سطح بالاتر یا استفاده مستقیم از APIهایOnBackInvokedDispatcherچارچوب اندروید است. APIهایandroidx.activityبه عنوان بخشی از Activity 1.12.0-alpha01، روی APIهای Navigation Event بازنویسی شدهاند.