navigationevent
| Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja Alfa |
|---|---|---|---|---|
| 24 września 2025 r. | - | - | - | 1.0.0-alpha09 |
Deklarowanie zależności
Aby dodać zależność od navigationevent, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle aplikacji lub modułu:
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha09" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha09") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Brak informacji o wersji tego artefaktu.
Wersja 1.0
Wersja 1.0.0-alpha09
24 września 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha09 Wersja 1.0.0-alpha09 zawiera te zmiany.
Zmiany w interfejsie API
- Zamiast tworzyć instancję
Idle(), używaj bezpośrednio obiektu singletonNavigationEventTransitionState.Idle. (Ic7d9e, b/444734264) - Ustaw konstruktory wygody jako wewnętrzne; uzyskuj instancje za pomocą publicznego
NavigationEventDispatcher.historyzamiast bezpośredniej konstrukcji. (I3b7e0, b/444734264) - Wymaga tworzenia
NavigationEventStateza pomocąrememberNavigationEventState; konstruktor jest teraz wewnętrzny. (Ie143c, b/444734264) - Zastosuj
onBackCompletedFallbackzamiastfallbackOnBackPressedi parametr konstruktora. Zachowanie pozostaje bez zmian. Wywoływane tylko w przypadku ukończonych, nieobsłużonych zdarzeń powrotu. (Idabe9, b/444734264) - Konstruktor podstawowy klasy
NavigationEventHistory(mergedHistory, currentIndex)to terazinternal. Użytkownicy zewnętrzni muszą używać publicznych konstruktorów (pustego konstruktora lub konstruktora opartego na partycjach) do tworzenia instancji. (I1c047, b/444734264) - Zezwól na akceptowanie właściciela z wartością null w
View.setViewTreeNavigationEventDispatcherOwner(Ic9eb6, b/444436762) NavigationEventInfoma teraz statusabstract classzamiastinterface. Zaktualizuj wszystkie niestandardowe implementacje, aby dziedziczyły z klasy (np.data class MyInfo : NavigationEventInfo()). (I1e59c, b/444734264)- Starsza usługa
NavigationEventDispatcher.statei funkcjagetState<T>()zostały usunięte. Używaj nowych, osobnych przepływówdispatcher.transitionState(postęp gestu) idispatcher.history(stos nawigacji). (Ic2ceb, b/444734264) - Wywołanie zwrotne
NavigationEventInput.onInfoChanged(...)zostało zastąpione. Wdróż nowe wywołanie zwrotneonHistoryChanged(history: NavigationEventHistory), aby otrzymywać aktualizacje w postaci pojedynczego obiektuNavigationEventHistory. (I23e0b, b/444734264) - Wprowadź nowy globalny
NavigationEventDispatcher.historyStateFlow. Ten nieogólny przepływ umożliwia obserwatorom subskrybowanie tylko zmian w stosie nawigacji i pozostaje stabilny podczas wykonywania gestów. Jest to odpowiedniktransitionState. (I1db10, b/444734264) - Wprowadź nowy globalny
NavigationEventDispatcher.transitionStateStateFlow. Ten nieogólny przepływ umożliwia obserwatorom subskrybowanie tylko stanu gestu fizycznego (Idle/InProgress), niezależnie od historii. (I171fa, b/444734264) - Przedstaw klasę
NavigationEventHistoryState. Będzie to podstawowy interfejs API do obserwowania historii informacji o nawigacji, niezależny od stanu gestu. (I81ca5, b/444734264) NavigationEventjest teraz oznaczony jako@Immutable, co umożliwia kompilatorowi Compose optymalizację ponownego komponowania. (If78c7, b/444734264)- Zaktualizowano interfejsy API modułu obsługi
navigationevent-compose.NavigationEventHandleriNavigationBackHandler(oraz ich warianty) obsługują teraz nowe przeciążenie, które akceptuje podniesioneNavigationEventStates. Proste przeciążenia (przyjmującecurrentInfo) są zachowywane i teraz wewnętrznie korzystają z tego nowego modelu stanu. (Ic3251, b/444734264) - Dodaj nowy element
@StableNavigationEventState<T>do bibliotekinavigationevent-compose. Ten obiekt łączy historię lokalną ze stanem gestu lokalnego i będzie głównym połączeniem międzyrememberNavigationEventStateaNavigationEventHandler. (Ifb69f, b/444734264) - Dodaj nową publiczną właściwość
transitionState: TransitionStatetylko do odczytu doNavigationEventHandler. Obsługujący mają teraz własny stan przejścia, który mogą obserwować systemy zewnętrzne. (I9acd2, b/444734264) - Przedstawiamy nową klasę zapieczętowaną
TransitionState. Będzie to podstawowy interfejs API do obserwowania stanu gestu, niezależny od historii nawigacji. (Id4beb, b/444734264) - Udostępnij właściwości
currentInfo,backInfoiforwardInfojako publiczne właściwości tylko do odczytu wNavigationEventHandler. (Ia7636, b/444734264) - Implementacje interfejsu
NavigationEventHandlermuszą teraz przekazywać wartośćinitialInfo: Tdo konstruktora klasy bazowej. (Idcfea, b/444734264) - Zastąp
OnBackInvokedInputtekstemOnBackInvokedOverlayInputlubOnBackInvokedDefaultInput. (I5323f, b/428948766) - Oznacz
NavigationEventStatejako@Immutable. Poprawia to wydajność Compose, ponieważ komponenty kompozycyjne obserwujące ten stan mogą prawidłowo pomijać ponowną kompozycję. (I399c8) - Zmień nazwę
NavigationEventInfo.NotProvidednaNavigationEventInfo.None;i zaktualizuj odwołania. Bez zmian w działaniu. (I5e2d4) NavigationEventInfojest teraz oznaczony jako@Immutable, co umożliwia kompilatorowi Compose optymalizację ponownego komponowania. (I7c112)- Ulepszyliśmy ergonomię Javy dzięki ciekawemu interfejsowi do zastępczego uzupełniania kodu. (I8a860)
- Zmień nazwę
onHasEnabledHandlerChangednaonHasEnabledHandlersChanged. Wyjaśnia to, że wywołanie zwrotne raportuje zbiorczy stan włączenia wszystkich modułów obsługi, a nie tylko jednego. (I1af61, b/443711297) - Usuń polecenie
hasEnabledHandler()z poleceniaNavigationEventDispatcher;i zamiast niego użyj poleceniaNavigationEventInput.onHasEnabledHandlersChanged. (Idef72, b/443711297) - Dodaj wywołanie zwrotne
onInfoChangeddoNavigationEventInput, aby powiadamiać słuchaczy o zmianach w historii nawigacji. Dzięki temu można uzyskać pełny kontekst bieżących, poprzednich i następnych stosów, co umożliwia reagowanie na informacje kontekstowe. (I69a8b, b/443282983) - Make
NavigationEvent'sswipeEdgean@IntDef(Icee54, b/443950342) - Dodaj parametr
prioritydoNavigationEventDispatcher.addInput, aby ograniczyć zakres dyspozytora do jednego priorytetu. Zdarzenia takie jakonHasEnabledCallbacksChangedbędą teraz wywoływane tylko wtedy, gdy zmienią się wywołania zwrotne o tym priorytecie. (I3e488, b/443711297) - Zmieniliśmy nazwę parametru
NavigationEventDispatcherzparentDispatcherna parent, aby była bardziej zrozumiała. (Id4f1f, b/443801782) - Usunięto
NavigationEventPriorityna rzecz@IntDefdla użytkowników Javy (I10a9f, b/440514265) - Wymuszanie umowy dotyczącej modułu obsługi nawigacji. Jeśli
NavigationEventHandlerustawiaisBackEnabledlubisForwardEnablednatrue, musisz teraz zastąpić odpowiednioonBackCompletedlubonForwardCompleted. Domyślne implementacje zgłaszają teraz wyjątek, aby zapobiec cichym błędom. (I17c62) - Wymuszanie prawidłowych wartości priorytetu podczas dodawania procedur obsługi zdarzeń nawigacji. Wywołanie
addHandlerz nieobsługiwanym priorytetem spowoduje teraz zgłoszenieIllegalArgumentException, co zapewni natychmiastową informację zwrotną o nieprawidłowym użyciu na wszystkich platformach docelowych. (I3c474)
Poprawki błędów
- Spraw, aby funkcja
addHandlerbyła idempotentna i ignorowała zduplikowane rejestracje. (I052aa, b/444734264) - Synchronizuj właściwości
NavigationEventStatepodczas ponownego komponowania. (Ib3b4d, b/444734264) - Upewnij się, że
NavigationEventInputsotrzymuje aktualne informacje kontekstowe (bieżące, poprzednie, następne) natychmiast po rejestracji. (Ie65bf, b/443282983)
Wersja 1.0.0-alpha08
10 września 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha08 Wersja 1.0.0-alpha08 zawiera te zmiany.
Nowe funkcje
- Wprowadź interfejs API
NavigationEventHandleroparty na funkcji Lambda, który zastąpi moduł obsługi oparty na przepływie. Obsługuj gesty cofania i przewijania do przodu za pomocą prostych wywołań zwrotnych zamiast zbierania przepływów, co zmniejsza ilość kodu i pozwala uniknąć problemów z anulowaniem. Udostępnij interfejsyNavigationBackHandleriNavigationForwardHandlerjako docelowe interfejsy API ułatwiające pracę. UsuńNavigationEventHandleroparte na przepływie i przejdź na nowe wywołania zwrotne. (I23bac, b/436248277) - Umożliwia pasywnym słuchaczom dostęp do pełnej listy poprzednich ekranów za pomocą połączonych informacji o wstecznych ekranach. Umożliwia interfejsom renderowanie podglądów i zagnieżdżonej historii nawigacji zamiast ograniczania się do wywołania zwrotnego najwyższego poziomu. (I7a510, b/436248277)
- Wprowadź model „wstecz/bieżący/dalej”, aby wyjaśnić stan nawigacji i umożliwić nawigację do przodu za pomocą zagnieżdżonych modułów obsługi. (Ib86da, b/420443609)
- Dodaj metody
onForward*iisForwardEnableddoNavigationEventCallback. (Ic100f, b/436248290) - Dodaliśmy obsługę nawigacji do przodu do elementu
NavigationEventInput. (I5734b)
Zmiany w interfejsie API
- Włącz testowanie zdarzeń nawigacji do przodu za pomocą
TestNavigationEventCallback. Użyj hookówisForwardEnabledionForward*. (I21fb5, b/420443609) - Zmień nazwy wywołań zwrotnych
onEvent*naonBack*wNavEvent. (I228b3, b/436248290) - Przekształć
SwipeEdgew zajęcia online. (Id5e01) - Spraw, aby biblioteka
navigationeventbyła interoperacyjna z Javą. Wszystkie publiczne interfejsy API są teraz w pełni dostępne z kodu w języku Java, co umożliwia bezproblemową integrację z projektami w różnych językach lub tylko w języku Java. (Ibc944,I5465f, I9fb1e, b/440532890b/443040294) - Wyjaśnienie ról interfejsu API przez zmianę nazwy
NavigationEventCallbacknaNavigationEventHandler. Ta zmiana lepiej odzwierciedla przeznaczenie klasy, czyli obsługę gestów nawigacji wieloetapowej. Odpowiednia metodaaddCallbackto terazaddHandler. (I2492a, b/443040331)
Poprawki błędów
- Zapobiegaj uruchamianiu funkcji powrotu podczas nawigacji do przodu. (I74814, b/436248290)
- Dodanie obsługi predykcyjnej nawigacji do przodu.
NavigationEventInterfejsy API obsługują teraz gesty w obu kierunkach, co umożliwia spójne animacje w przypadku obu kierunków nawigacji. (Idc98c, b/436248290) - Zapobiega awarii
IllegalStateExceptionpodczas ponownego komponowania, gdy dzieckoNavigationEventDispatcherOwnerzostanie usunięte. (Iff50c, b/412629020) - Pasywni słuchacze mogą teraz uzyskać dostęp do pełnej historii nawigacji wstecznej dzięki połączonym informacjom o wstecznej nawigacji, co umożliwia interfejsom renderowanie podglądów i zagnieżdżonej historii nawigacji zamiast ograniczać się do wywołania zwrotnego najwyższego poziomu. (I7a510, b/436248277)
Wersja 1.0.0-alpha07
27 sierpnia 2025 roku
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha07 Wersja 1.0.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Usuń
NavigationEventDispatcher.onHasEnabledCallbacksChanged. (I50e97) - Uczyń
NavigationEventCallback.onEventCompleted()abstrakcyjnym. (I36b38) - Zmień metody
NavigationEventCallback#on*naprotected. Zaktualizuj kod połączenia, aby je zastąpić. (I6b691) - Zmień nazwę funkcji
DirectNavigationEventInput. (Iffb62) - Zmień nazwę
NavigationEventInput.onAttachnaonAdded. (I2d0b8) - Zmień nazwę
NavigationEventInput.onDetachnaonRemoved. (I2d0b8) - Zmień nazwę
NavigationEventInputHandlernaNavigationEventInput. (I676a4) - Dodano
@EmptySuperdoNavigationEventInput.onHasEnabledCallbacksChanged. (If9853) - Wdróż
onAttachw:NavigationEventInputHandler. (I03648) - Wdróż
onDetachw:NavigationEventInputHandler. (I03648) - Domyślnie
NavigationEventCallbackjest włączona po utworzeniu. (Ic0188) - Zastąp
NavigationEventInput.addOnHasEnabledCallbacksChangedCallbacktekstemNavigationEventInput.onHasEnabledCallbacksChanged. (I64e93) - Wymagaj głównego wątku dla
NavigationEventDispatcher.addInput. (Ic2930) - Wymagaj głównego wątku dla
NavigationEventDispatcher.removeInput. (Ic2930) - Usuń
Dispatcher.addOnHasEnabledCallbacksChangedCallback. Zastąp elementemDispatcher.onHasEnabledCallbacksChanged. (Ida3e3, b/436530096)
Poprawki błędów
- Naprawiono błąd, w wyniku którego dodanie już dołączonego modułu obsługi lub usunięcie nieprzyłączonego modułu wywoływało nieprawidłową logikę cyklu życia. (I9e47b)
Wersja 1.0.0-alpha06
13 sierpnia 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha06 Wersja 1.0.0-alpha06 zawiera te zmiany.
Nowe funkcje
Passive Listeners API
Teraz możesz przekazywać niestandardowe informacje kontekstowe z dowolnego hosta nawigacji i pasywnie nasłuchiwać zmiany stanu gestów z dowolnego miejsca w interfejsie. Umożliwia to animacje zależne od kontekstu w przypadku przewidywanego przejścia wstecz i innych gestów nawigacyjnych.
Ta funkcja składa się z 2 części:
- Przekazywanie informacji – użyj parametru
NavigationEventInfo, aby przekazywać dane niestandardowe. - Consuming State – użyj funkcji
dispatcher.state(NavigationEventState), aby obserwować postęp i kontekst gestu.
NavigationEventCallbackudostępnia teraz metodęsetInfo(currentInfo, previousInfo)do ustawiania kontekstu gestu w jednym wywołaniu (I1d5e7, b/424470518).NavigationEventHandlerdodaje nowe przeciążenie, które akceptujecurrentInfoipreviousInfo, co sprawia, że jest to podstawowy interfejs API do dostarczania kontekstu w aplikacjach Compose (I6ecd3, b/424470518).
Przykład:
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
NavigationEventDispatcherudostępnia teraz parametrydispatcher.stateidispatcher.getState<T>()(If7fae, Ia90ca, b/424470518). Te interfejsy API oparte naStateFlowumożliwiają dowolnemu interfejsowi obserwowanie postępu gestu i danych kontekstowych bez bezpośredniej obsługi zdarzenia.
Przykład:
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 */ }
}
Dodaj właściwość
progressdo elementuNavigationEventState(I7b196), która zwraca wartośćlatestEvent.progress, gdy proces jest w toku, lub0Fw przeciwnym razie:val progress = state.progressDodaj funkcję
NavigationEventDispatcherOwnercomposable, aby hierarchicznie tworzyć, łączyć i usuwać instancjeNavigationEventDispatcher. Włącz dynamiczne sterowanie stanem włączonym dyspozytora i automatyczne czyszczenie.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
Zmiany w interfejsie API
- Parametr
isPassthroughzostał usunięty z funkcjiNavigationEventCallback. (I99028, b/424470518) - Konstruktory
NavigationEventStatesą teraz wewnętrzne. Aby przetestować, zaktualizuj stan (domyślnieIdle) za pomocąDirectNavigationEventInputHandler. Zadzwoń pod numerhandleOnStartedlubhandleOnProgressed, aby ustawić stan naInProgress, a pod numerhandleOnCompletedlubhandleOnCancelled, aby przywrócić stanIdle. Aby zaktualizowaćNavigationEventInfo, użyjNavigationEventCallback.setInfo. (I93dca, b/424470518) - Dodano parametry domyślne do
NavigationEvent, aby ułatwić tworzenie instancji i uprościć testowanie, które powinno być używane zamiastTestNavigationEvent. (I5dc49, I232f4) - Dodaliśmy
TestNavigationEventCallbackdo testowania zdarzeń nawigacji z określonymi stanami bieżącymi i poprzednimi. (Idd22e, b/424470518) NavigationEventInputHandlerzostała przekształcona w klasę abstrakcyjną, aby zastąpić poprzednią klasęAbstractNavigationEventInputHandlerimplementacją wDirectNavigationEventInputHandler(Iadde5, Ifed40I3897c, b/432616296, b/435416924).- Prefiksy funkcji
send*wNavigationEventInputHandlerzostały zmienione nahandle*. (Iffcaf) OnBackInvokedInputHandlerobejmuje teraz nowąabstractNavigationInputHandler. (Ib45aa)- Zmieniliśmy
NavigationEventDispatcherOwner, aby wymagać dyspozytora nadrzędnego, w którym musisz jawnie przekazaćnull, aby utworzyć dyspozytora głównego. (Ia6f64, b/431534103)
Poprawki błędów
- Zwiększona wydajność dzięki unikaniu kopiowania kolekcji w
NavigationEventDispatcher.dispose(). (I4ab09) - Rozwiązaliśmy problem, który powodował, że
NavigationEventHandlernie reagował prawidłowo na zmiany stanu włączenia. (Ia5268,I19bec, I5be5c, b/431534103)
Nowości w Dokumentach
- Dokumentacja KDocs dla
NavigationEventzostała rozszerzona, aby wyjaśnić jej rolę jako ujednoliconego kontenera zdarzeń i szczegółowe działanie właściwości w przypadku różnych typów nawigacji (gesty, kliknięcia). (I91e8d) - Zaktualizowaliśmy dokumentację interfejsów API Compose do obsługi powrotu do poprzedniego ekranu (
BackHandler,PredictiveBackHandler,NavigationEventHandler), aby zwrócić uwagę na zachowanie związane z kolejnością wywoływania zwrotnego. (I7ab94, )
Aktualizacja zależności
NavigationEventzależy teraz od Compose Runtime w wersji 1.9.0-beta03, co umożliwia artefaktowinavigationevent-composeobsługę wszystkich platform KMP. (Ia1b87)
Wersja 1.0.0-alpha05
30 lipca 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zmiany.
Obsługa hierarchii rodzic-dziecko:
NavigationEventDispatcher może teraz mieć dyspozytorów nadrzędnych i podrzędnych, tworząc hierarchiczną strukturę drzewa. Umożliwia to propagowanie zdarzeń nawigacji i bardziej elastyczne zarządzanie nimi w przypadku złożonych komponentów interfejsu Compose, ponieważ odzwierciedla hierarchię strukturalną interfejsu za pomocą połączonych dyspozytorów. (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)
Hierarchiczna właściwość isEnabled umożliwia sterowanie dyspozytorem od góry do dołu. Gdy w przypadku dyspozytora ustawisz isEnabled na false, automatycznie wyłączysz wszystkich jego dyspozytorów podrzędnych. Ta funkcja umożliwia sprawne wyłączanie całych gałęzi systemu zdarzeń nawigacyjnych. (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
Dodatkowo właściwość isEnabled w NavigationEventCallback uwzględnia teraz stan włączenia powiązanego z nią modułu wysyłającego. Oznacza to, że wywołanie zwrotne jest uznawane za włączone tylko wtedy, gdy jest włączone samo wywołanie zwrotne i jego dyspozytor (wraz z jego elementami nadrzędnymi), co zapewnia spójną kontrolę hierarchiczną nad aktywacją wywołania zwrotnego. (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()
Wprowadziliśmy nową dispose() metodę prawidłowego czyszczenia dyspozytorów i ich elementów podrzędnych. Wywołanie dispose() zatrzymuje odbiorców, aby zapobiec wyciekom pamięci, rekursywnie usuwa wszystkie dyspozytory podrzędne, usuwa wszystkie wywołania zwrotne zarejestrowane w dyspozytorze i odłącza go od dyspozytora nadrzędnego. Dzięki temu zasoby są prawidłowo zwalniane, gdy dyspozytorzy nie są już potrzebni. (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
Jeśli w przypadku zamkniętego dyspozytora zostanie wywołana jakakolwiek metoda publiczna, natychmiast zostanie zgłoszony wyjątek IllegalStateException. Zapobiega to cichym błędom i pomaga deweloperom wykrywać nieprawidłowe użycie podczas opracowywania aplikacji. (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
Uwaga: wprowadzimy nowy NavigationEventDispatcherOwner komponent, który automatycznie zarządza dyspozytorem podrzędnym w interfejsie Compose w aosp/3692572. Ta zmiana nie została jednak uwzględniona w bieżącej wersji i jest planowana w następnej.
Biblioteka testów nawigacji
- Dodaj moduł
navigationevent-testing, aby udostępnić narzędzia do testowania bibliotekinavigationevent. (0e50b6) - Dodaj
TestNavigationEventCallbackfałszywą klasę narzędziową do testowania. Rejestruje wywołania metody wywołania zwrotnego i przechowuje otrzymaneNavigationEvent, aby umożliwić weryfikację. (4a0246) - Dodano
TestNavigationEventfałszywą funkcję narzędziową do tworzenia instancjiNavigationEventz wartościami domyślnymi, co upraszcza testy jednostkowe przetwarzania zdarzeń nawigacji. (3b63f5) - Dodaj
TestNavigationEventDispatcherOwnerfałszywą klasę narzędziową do testowania. Śledzi liczbę zdarzeń związanych z wypadkiem i zmianą stanu włączonego, aby obsługiwać weryfikację interakcji w testach. (c8753e)
Zmiany w interfejsie API
- Przenieś
NavigationEventInputHandlerzandroidMaindocommonMain, aby był dostępny w kodzie wspólnym KMP. Dodano nowe metodypublic send*do wysyłania zdarzeń. Zmień funkcje wysyłania wNavigationEventDispatcherzpublicnainternal. Użytkownicy muszą teraz używaćNavigationEventInputHandlerdo wysyłania zdarzeń. (Ia7114) - Zmień nazwę
NavigationInputHandlernaOnBackInvokedInputHandler. (I63405)
Poprawki błędów
- Przeprowadź refaktoryzację
NavigationEventDispatcher, aby zmniejszyć obciążenie przez unikanie przydzielania list pośrednich i zwiększenie wydajności wysyłania wywołań zwrotnych. (I82702, I1a9d9) - Dodaj adnotacje
@FloatRangedo póltouchX,touchYiprogresswNavigationEvent, aby wymusić prawidłowe zakresy wartości w czasie kompilacji i zwiększyć bezpieczeństwo interfejsu API. (Iac0ec)
Wersja 1.0.0-alpha04
2 lipca 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zmiany.
Poprawki błędów
- Użyto
implementedInJetBrainsForkdonavigationevent-composei dodano element docelowycommonStubs, aby zachować zgodność z konwencjami Compose. Zmiana zaproponowana przez JetBrains. (f60c79) - Naprawiono stosowanie wtyczki kompilatora Compose dla Kotlin/Native, aby zapewnić prawidłowe generowanie stubów. Nie ma to wpływu na publiczne interfejsy API ani ich działanie. (1890c9)
Wersja 1.0.0-alpha03
18 czerwca 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Wprowadziliśmy nowy moduł
navigationevent-compose, który obsługuje funkcje Jetpack Compose w bibliotecenavigationevent. (980d78) NavigationEventKomponowanie dodało nowąLocalNavigationEventDispatcherOwnerkompozycję lokalną. Zwraca wartość dopuszczającą wartość null, aby lepiej określić, czy jest ona dostępna w bieżącej kompozycji.NavigationEventHandlerbędzie teraz zgłaszać błąd, jeśli nie znajdzie właściciela. (62ffda)NavigationEventCompose dodał nowyNavigationEventHandlerkomponent kompozycyjny do obsługi zdarzeń (gestu przewidywania powrotu). ZawieraFlowobiektówNavigationEvent, które muszą zostać zebrane w dostarczonej przez Ciebie lambdzie zawieszającej 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
}
}
Zmiany w interfejsie API
- Każdy
NavigationEventCallbackmoże być teraz zarejestrowany tylko w 1NavigationEventDispatchernaraz. Dodanie go do wielu dyspozytorów powoduje błądIllegalStateException. Pamiętaj, że to zachowanie różni się od zachowaniaOnBackPressedDispatcher, które umożliwia korzystanie z wielu dyspozytorów. (e82c19) - Zmieniliśmy
isPassThroughnaval, aby zapobiec mutacji podczas nawigacji, która mogłaby zakłócić wysyłanieNavigationEvent. (I0b287)
Wersja 1.0.0-alpha02
4 czerwca 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Zastąp pomocniczy konstruktor
NavigationEventDispatcherargumentami domyślnymi. (I716a0) - Usuń priorytetową usługę z konta
NavigationEventCallback. Zamiast tego przekaż priorytet doNavigationEventDispatcher.addCallback(). (I13cae)
Poprawki błędów
- Naprawiliśmy
ConcurrentModificationException, który mógł wystąpić, gdy wywoływanoNavigationEventCallback.remove()z powodu jednoczesnej modyfikacji wewnętrznej listy elementów zamykanych. (b/420919815)
Wersja 1.0.0-alpha01
20 maja 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Biblioteka
androidx.navigationeventudostępnia interfejs API KMP do obsługi systemowego przycisku Wstecz oraz przewidywanego powrotu. InterfejsNavigationEventDispatchersłuży jako wspólny interfejs API do rejestrowania co najmniej 1 instancjiNavigationEventCallbackw celu odbierania zdarzeń systemowych. - Ta warstwa znajduje się poniżej wcześniej udostępnionych interfejsów API w
androidx.activityi ma być mniej subiektywnym zamiennikiem interfejsów API aktywności w komponentach wyższego poziomu lub bezpośredniego korzystania z interfejsów APIOnBackInvokedDispatcherplatformy Android. Interfejsy APIandroidx.activityzostały przepisane na podstawie interfejsów Navigation Event API w ramach Activity 1.12.0-alpha01.