navigationevent

  
Biblioteka Navigation Event udostępnia interfejs API oparty na KMP do obsługi systemowego przycisku Wstecz oraz przewidywanego powrotu.
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.

Tworzenie nowego problemu

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ług NavigationEvent.touchXNavigationEvent.touchY. Wartości te reprezentują bezwzględne współrzędne pikseli i nie mają górnej granicy 1.0. (I4b205, b/445989313)
  • Zmień kod komponentu NavigationEventDispatcherOwner na rememberNavigationEventDispatcherOwner. Funkcja zwraca teraz bezpośrednio wartość NavigationEventDispatcherOwner. Aby przekazać tego właściciela do subkompozycji, użyj atrybutu CompositionLocalProvider. (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 singleton NavigationEventTransitionState.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 zamiast fallbackOnBackPressed 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 teraz internal. 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 status abstract class zamiast interface. Zaktualizuj wszystkie niestandardowe implementacje, aby dziedziczyły z klasy (np.data class MyInfo : NavigationEventInfo()). (I1e59c, b/444734264)
  • Starsza usługa NavigationEventDispatcher.state i funkcja getState<T>() zostały usunięte. Używaj nowych, osobnych przepływów dispatcher.transitionState (postęp gestu) i dispatcher.history (stos nawigacji). (Ic2ceb, b/444734264)
  • Wywołanie zwrotne NavigationEventInput.onInfoChanged(...) zostało zastąpione. Wdróż nowe wywołanie zwrotne onHistoryChanged(history: NavigationEventHistory), aby otrzymywać aktualizacje w postaci pojedynczego obiektu NavigationEventHistory. (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 odpowiednik transitionState. (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. NavigationEventHandlerNavigationBackHandler (oraz ich warianty) obsługują teraz nowe przeciążenie, które akceptuje podniesione NavigationEventStates. Proste przeciążenia (przyjmujące currentInfo) są zachowywane i teraz wewnętrznie korzystają z tego nowego modelu stanu. (Ic3251, b/444734264)
  • Dodaj nowy element @Stable NavigationEventState<T> do biblioteki navigationevent-compose. Ten obiekt łączy historię lokalną ze stanem gestu lokalnego i będzie głównym połączeniem między rememberNavigationEventStateNavigationEventHandler. (Ifb69f, b/444734264)
  • Dodaj nową publiczną właściwość transitionState: TransitionState tylko do odczytu do NavigationEventHandler. 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, backInfoforwardInfo jako publiczne właściwości tylko do odczytu w NavigationEventHandler. (Ia7636, b/444734264)
  • Implementacje interfejsu NavigationEventHandler muszą teraz przekazywać wartość initialInfo: T do konstruktora klasy bazowej. (Idcfea, b/444734264)
  • Zastąp OnBackInvokedInput tekstem OnBackInvokedOverlayInput lub OnBackInvokedDefaultInput. (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 na NavigationEventInfo.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 na onHasEnabledHandlersChanged. 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 polecenia NavigationEventDispatcher; i zamiast niego użyj polecenia NavigationEventInput.onHasEnabledHandlersChanged. (Idef72, b/443711297)
  • Dodaj wywołanie zwrotne onInfoChanged do NavigationEventInput, 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's swipeEdge an @IntDef (Icee54, b/443950342)
  • Dodaj parametr priority do NavigationEventDispatcher.addInput, aby ograniczyć zakres dyspozytora do jednego priorytetu. Zdarzenia takie jak onHasEnabledCallbacksChanged będą teraz wywoływane tylko wtedy, gdy zmienią się wywołania zwrotne o tym priorytecie. (I3e488, b/443711297)
  • Zmieniliśmy nazwę parametru NavigationEventDispatcherparentDispatcher 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 ustawia isBackEnabled lub isForwardEnabled na true, musisz teraz zastąpić odpowiednio onBackCompleted lub onForwardCompleted. 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łoszenie IllegalArgumentException, 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 interfejsy NavigationBackHandlerNavigationForwardHandler 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*isForwardEnabled do NavigationEventCallback. (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ów isForwardEnabledonForward*. (I21fb5, b/420443609)
  • Zmień nazwy wywołań zwrotnych onEvent* na onBack* w NavEvent. (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 na NavigationEventHandler. Ta zmiana lepiej odzwierciedla przeznaczenie klasy, czyli obsługę gestów nawigacji wieloetapowej. Odpowiednia metoda addCallback to teraz addHandler. (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 dziecko NavigationEventDispatcherOwner 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* na protected. Zaktualizuj kod połączenia, aby je zastąpić. (I6b691)
  • Zmień nazwę funkcji DirectNavigationEventInput. (Iffb62)
  • Zmień nazwę NavigationEventInput.onAttach na onAdded. (I2d0b8)
  • Zmień nazwę NavigationEventInput.onDetach na onRemoved. (I2d0b8)
  • Zmień nazwę NavigationEventInputHandler na NavigationEventInput. (I676a4)
  • Dodano @EmptySuper do NavigationEventInput.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 tekstem NavigationEventInput.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 elementem Dispatcher.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:

  1. Przekazywanie informacji – użyj parametru NavigationEventInfo, aby przekazywać dane niestandardowe.
  2. 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 akceptuje currentInfopreviousInfo, 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 parametry dispatcher.statedispatcher.getState<T>() (If7fae, Ia90ca, b/424470518). Te interfejsy API oparte na StateFlow 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 elementu NavigationEventState (I7b196), która zwraca wartość latestEvent.progress, gdy proces jest w toku, lub 0F w przeciwnym razie:

    val progress = state.progress
    
  • Dodaj funkcję NavigationEventDispatcherOwner composable, aby hierarchicznie tworzyć, łączyć i usuwać instancje NavigationEventDispatcher. 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 funkcji NavigationEventCallback. (I99028, b/424470518)
  • Konstruktory NavigationEventState są teraz wewnętrzne. Aby przetestować, zaktualizuj stan (domyślnie Idle) za pomocą DirectNavigationEventInputHandler. Zadzwoń pod numer handleOnStarted lub handleOnProgressed, aby ustawić stan na InProgress, a pod numer handleOnCompleted lub handleOnCancelled, aby przywrócić stan Idle. Aby zaktualizować NavigationEventInfo, użyj NavigationEventCallback.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 zamiast TestNavigationEvent. (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ą w DirectNavigationEventInputHandler (Iadde5, Ifed40I3897c, b/432616296, b/435416924).
  • Prefiksy funkcji send* w NavigationEventInputHandler zostały zmienione na handle*. (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 artefaktowi navigationevent-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ść isEnabledNavigationEventCallback 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 biblioteki navigationevent. (0e50b6)
  • Dodaj TestNavigationEventCallback fałszywą klasę narzędziową do testowania. Rejestruje wywołania metody wywołania zwrotnego i przechowuje otrzymane NavigationEvent, aby umożliwić weryfikację. (4a0246)
  • Dodano TestNavigationEvent fałszywą funkcję narzędziową do tworzenia instancji NavigationEvent 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ś NavigationEventInputHandlerandroidMain do commonMain, aby był dostępny w kodzie wspólnym KMP. Dodano nowe metody public send* do wysyłania zdarzeń. Zmień funkcje wysyłania w NavigationEventDispatcherpublic na internal. Użytkownicy muszą teraz używać NavigationEventInputHandler do wysyłania zdarzeń. (Ia7114)
  • Zmień nazwę NavigationInputHandler na OnBackInvokedInputHandler. (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ól touchX, touchY i progress w NavigationEvent, 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 do navigationevent-compose i dodano element docelowy commonStubs, 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 bibliotece navigationevent. (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ł nowy NavigationEventHandler komponent kompozycyjny do obsługi zdarzeń (gestu przewidywania powrotu). Zawiera Flow obiektów NavigationEvent, 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 1 NavigationEventDispatcher naraz. Dodanie go do wielu dyspozytorów powoduje błąd IllegalStateException. Pamiętaj, że to zachowanie różni się od zachowania OnBackPressedDispatcher, które umożliwia korzystanie z wielu dyspozytorów. (e82c19)
  • Zmieniliśmy isPassThrough na val, aby zapobiec mutacji podczas nawigacji, która mogłaby zakłócić wysyłanie NavigationEvent. (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 do NavigationEventDispatcher.addCallback(). (I13cae)

Poprawki błędów

  • Naprawiliśmy ConcurrentModificationException, który mógł wystąpić, gdy wywoływano NavigationEventCallback.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. Interfejs NavigationEventDispatcher służy jako wspólny interfejs API do rejestrowania co najmniej 1 instancji NavigationEventCallback 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 API OnBackInvokedDispatcher platformy Android. Interfejsy API androidx.activity zostały przepisane na podstawie interfejsów Navigation Event API w ramach Activity 1.12.0-alpha01.