navigationevent
Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja Alfa |
---|---|---|---|---|
8 października 2025 r. | - | - | 1.0.0-beta01 | - |
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-beta01" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-beta01") }
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-beta01
8 października 2025 r.
Publikacja androidx.navigationevent:navigationevent-*:1.0.0-beta01
Wersja 1.0.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Popraw adnotację
FloatRange
dotyczącą usługNavigationEvent.touchX
iNavigationEvent.touchY
. Wartości te reprezentują bezwzględne współrzędne pikseli i nie mają górnej granicy1.0
. (I4b205, b/445989313) - Zmień kod komponentu
NavigationEventDispatcherOwner
narememberNavigationEventDispatcherOwner
. Funkcja zwraca teraz bezpośrednio wartośćNavigationEventDispatcherOwner
. Aby przekazać tego właściciela do subkompozycji, użyj atrybutuCompositionLocalProvider
. (I874b2, b/444446629)
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.history
zamiast bezpośredniej konstrukcji. (I3b7e0, b/444734264) - Wymaga tworzenia
NavigationEventState
za pomocąrememberNavigationEventState
; konstruktor jest teraz wewnętrzny. (Ie143c, b/444734264) - Zastosuj
onBackCompletedFallback
zamiastfallbackOnBackPressed
i 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) NavigationEventInfo
ma teraz statusabstract class
zamiastinterface
. Zaktualizuj wszystkie niestandardowe implementacje, aby dziedziczyły z klasy (np.data class MyInfo : NavigationEventInfo()
). (I1e59c, b/444734264)- Starsza usługa
NavigationEventDispatcher.state
i 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.history
StateFlow
. 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.transitionState
StateFlow
. 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) NavigationEvent
jest teraz oznaczony jako@Immutable
, co umożliwia kompilatorowi Compose optymalizację ponownego komponowania. (If78c7, b/444734264)- Zaktualizowano interfejsy API modułu obsługi
navigationevent-compose
.NavigationEventHandler
iNavigationBackHandler
(oraz ich warianty) obsługują teraz nowe przeciążenie, które akceptuje podniesioneNavigationEventState
s. Proste przeciążenia (przyjmującecurrentInfo
) są zachowywane i teraz wewnętrznie korzystają z tego nowego modelu stanu. (Ic3251, b/444734264) - Dodaj nowy element
@Stable
NavigationEventState<T>
do bibliotekinavigationevent-compose
. Ten obiekt łączy historię lokalną ze stanem gestu lokalnego i będzie głównym połączeniem międzyrememberNavigationEventState
aNavigationEventHandler
. (Ifb69f, b/444734264) - Dodaj nową publiczną właściwość
transitionState: TransitionState
tylko 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
,backInfo
iforwardInfo
jako publiczne właściwości tylko do odczytu wNavigationEventHandler
. (Ia7636, b/444734264) - Implementacje interfejsu
NavigationEventHandler
muszą teraz przekazywać wartośćinitialInfo: T
do konstruktora klasy bazowej. (Idcfea, b/444734264) - Zastąp
OnBackInvokedInput
tekstemOnBackInvokedOverlayInput
lubOnBackInvokedDefaultInput
. (I5323f, b/428948766) - Oznacz
NavigationEventState
jako@Immutable
. Poprawia to wydajność Compose, ponieważ komponenty kompozycyjne obserwujące ten stan mogą prawidłowo pomijać ponowną kompozycję. (I399c8) - Zmień nazwę
NavigationEventInfo.NotProvided
naNavigationEventInfo.None;
i zaktualizuj odwołania. Bez zmian w działaniu. (I5e2d4) NavigationEventInfo
jest 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ę
onHasEnabledHandlerChanged
naonHasEnabledHandlersChanged
. 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
onInfoChanged
doNavigationEventInput
, 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
'sswipeEdge
an@IntDef
(Icee54, b/443950342) - Dodaj parametr
priority
doNavigationEventDispatcher.addInput
, aby ograniczyć zakres dyspozytora do jednego priorytetu. Zdarzenia takie jakonHasEnabledCallbacksChanged
będą teraz wywoływane tylko wtedy, gdy zmienią się wywołania zwrotne o tym priorytecie. (I3e488, b/443711297) - Zmieniliśmy nazwę parametru
NavigationEventDispatcher
zparentDispatcher
na parent, aby była bardziej zrozumiała. (Id4f1f, b/443801782) - Usunięto
NavigationEventPriority
na rzecz@IntDef
dla użytkowników Javy (I10a9f, b/440514265) - Wymuszanie umowy dotyczącej modułu obsługi nawigacji. Jeśli
NavigationEventHandler
ustawiaisBackEnabled
lubisForwardEnabled
natrue
, musisz teraz zastąpić odpowiednioonBackCompleted
lubonForwardCompleted
. 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
addHandler
z 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
addHandler
była idempotentna i ignorowała zduplikowane rejestracje. (I052aa, b/444734264) - Synchronizuj właściwości
NavigationEventState
podczas ponownego komponowania. (Ib3b4d, b/444734264) - Upewnij się, że
NavigationEventInputs
otrzymuje 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
NavigationEventHandler
oparty 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 interfejsyNavigationBackHandler
iNavigationForwardHandler
jako docelowe interfejsy API ułatwiające pracę. UsuńNavigationEventHandler
oparte 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*
iisForwardEnabled
doNavigationEventCallback
. (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ówisForwardEnabled
ionForward*
. (I21fb5, b/420443609) - Zmień nazwy wywołań zwrotnych
onEvent*
naonBack*
wNavEvent
. (I228b3, b/436248290) - Przekształć
SwipeEdge
w zajęcia online. (Id5e01) - Spraw, aby biblioteka
navigationevent
był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
NavigationEventCallback
naNavigationEventHandler
. Ta zmiana lepiej odzwierciedla przeznaczenie klasy, czyli obsługę gestów nawigacji wieloetapowej. Odpowiednia metodaaddCallback
to 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.
NavigationEvent
Interfejsy 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
IllegalStateException
podczas ponownego komponowania, gdy dzieckoNavigationEventDispatcherOwner
zostanie 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.onAttach
naonAdded
. (I2d0b8) - Zmień nazwę
NavigationEventInput.onDetach
naonRemoved
. (I2d0b8) - Zmień nazwę
NavigationEventInputHandler
naNavigationEventInput
. (I676a4) - Dodano
@EmptySuper
doNavigationEventInput.onHasEnabledCallbacksChanged
. (If9853) - Wdróż
onAttach
w:NavigationEventInputHandler
. (I03648) - Wdróż
onDetach
w:NavigationEventInputHandler
. (I03648) - Domyślnie
NavigationEventCallback
jest włączona po utworzeniu. (Ic0188) - Zastąp
NavigationEventInput.addOnHasEnabledCallbacksChangedCallback
tekstemNavigationEventInput.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.
NavigationEventCallback
udostępnia teraz metodęsetInfo(currentInfo, previousInfo)
do ustawiania kontekstu gestu w jednym wywołaniu (I1d5e7, b/424470518).NavigationEventHandler
dodaje nowe przeciążenie, które akceptujecurrentInfo
ipreviousInfo
, 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 */ }
NavigationEventDispatcher
udostępnia teraz parametrydispatcher.state
idispatcher.getState<T>()
(If7fae, Ia90ca, b/424470518). Te interfejsy API oparte naStateFlow
umoż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ść
progress
do elementuNavigationEventState
(I7b196), która zwraca wartośćlatestEvent.progress
, gdy proces jest w toku, lub0F
w przeciwnym razie:val progress = state.progress
Dodaj funkcję
NavigationEventDispatcherOwner
composable, 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
isPassthrough
został usunięty z funkcjiNavigationEventCallback
. (I99028, b/424470518) - Konstruktory
NavigationEventState
są teraz wewnętrzne. Aby przetestować, zaktualizuj stan (domyślnieIdle
) za pomocąDirectNavigationEventInputHandler
. Zadzwoń pod numerhandleOnStarted
lubhandleOnProgressed
, aby ustawić stan naInProgress
, a pod numerhandleOnCompleted
lubhandleOnCancelled
, 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
TestNavigationEventCallback
do testowania zdarzeń nawigacji z określonymi stanami bieżącymi i poprzednimi. (Idd22e, b/424470518) NavigationEventInputHandler
została przekształcona w klasę abstrakcyjną, aby zastąpić poprzednią klasęAbstractNavigationEventInputHandler
implementacją wDirectNavigationEventInputHandler
(Iadde5, Ifed40I3897c, b/432616296, b/435416924).- Prefiksy funkcji
send*
wNavigationEventInputHandler
zostały zmienione nahandle*
. (Iffcaf) OnBackInvokedInputHandler
obejmuje teraz nowąabstract
NavigationInputHandler
. (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
NavigationEventHandler
nie reagował prawidłowo na zmiany stanu włączenia. (Ia5268,I19bec, I5be5c, b/431534103)
Nowości w Dokumentach
- Dokumentacja KDocs dla
NavigationEvent
został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
NavigationEvent
zależy teraz od Compose Runtime w wersji 1.9.0-beta03, co umożliwia artefaktowinavigationevent-compose
obsł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
TestNavigationEventCallback
fałszywą klasę narzędziową do testowania. Rejestruje wywołania metody wywołania zwrotnego i przechowuje otrzymaneNavigationEvent
, aby umożliwić weryfikację. (4a0246) - Dodano
TestNavigationEvent
fałszywą funkcję narzędziową do tworzenia instancjiNavigationEvent
z wartościami domyślnymi, co upraszcza testy jednostkowe przetwarzania zdarzeń nawigacji. (3b63f5) - Dodaj
TestNavigationEventDispatcherOwner
fał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ś
NavigationEventInputHandler
zandroidMain
docommonMain
, aby był dostępny w kodzie wspólnym KMP. Dodano nowe metodypublic send*
do wysyłania zdarzeń. Zmień funkcje wysyłania wNavigationEventDispatcher
zpublic
nainternal
. Użytkownicy muszą teraz używaćNavigationEventInputHandler
do wysyłania zdarzeń. (Ia7114) - Zmień nazwę
NavigationInputHandler
naOnBackInvokedInputHandler
. (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
@FloatRange
do póltouchX
,touchY
iprogress
wNavigationEvent
, 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
implementedInJetBrainsFork
donavigationevent-compose
i 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) NavigationEvent
Komponowanie dodało nowąLocalNavigationEventDispatcherOwner
kompozycję lokalną. Zwraca wartość dopuszczającą wartość null, aby lepiej określić, czy jest ona dostępna w bieżącej kompozycji.NavigationEventHandler
będzie teraz zgłaszać błąd, jeśli nie znajdzie właściciela. (62ffda)NavigationEvent
Compose dodał nowyNavigationEventHandler
komponent kompozycyjny do obsługi zdarzeń (gestu przewidywania powrotu). ZawieraFlow
obiektó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
NavigationEventCallback
może być teraz zarejestrowany tylko w 1NavigationEventDispatcher
naraz. 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
isPassThrough
naval
, 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
NavigationEventDispatcher
argumentami 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.navigationevent
udostępnia interfejs API KMP do obsługi systemowego przycisku Wstecz oraz przewidywanego powrotu. InterfejsNavigationEventDispatcher
służy jako wspólny interfejs API do rejestrowania co najmniej 1 instancjiNavigationEventCallback
w celu odbierania zdarzeń systemowych. - Ta warstwa znajduje się poniżej wcześniej udostępnionych interfejsów API w
androidx.activity
i ma być mniej subiektywnym zamiennikiem interfejsów API aktywności w komponentach wyższego poziomu lub bezpośredniego korzystania z interfejsów APIOnBackInvokedDispatcher
platformy Android. Interfejsy APIandroidx.activity
zostały przepisane na podstawie interfejsów Navigation Event API w ramach Activity 1.12.0-alpha01.