AppRouter
Centralny singleton zarządzający stanem nawigacji w całej aplikacji.
AppRouter jest pojedynczym źródłem prawdy (Single Source of Truth) dla nawigacji i zapewnia globalny dostęp do funkcji nawigacyjnych z dowolnego miejsca w aplikacji.
Architektura
Zakładki: Główne sekcje aplikacji
Stosy nawigacji: Każda zakładka ma własny stos ekranów z możliwością nawigacji w przód/tył
Reaktywny stan: UI obserwuje zmiany stanu przez
StateFlowBezpieczeństwo: Zabezpieczenia przed nieprawidłowym stanem (np. cofanie z ekranu głównego)
Przykłady użycia
Przełączanie zakładek
AppRouter.switchToTab(1u) // Przejdź do zakładki o indexie 1Nawigacja do nowego ekranu
val formScreen = GameFormScreen(gameId = 123)
AppRouter.navigateTo(formScreen)Powrót do poprzedniego ekranu
AppRouter.goBack() // Bezpieczne - nie cofnie z ekranu głównego zakładkiObserwowanie stanu w UI
@Composable
fun MyComponent() {
val navState by AppRouter.state.collectAsState()
navState?.let { state ->
Text("Aktywna zakładka: ${state.activeTab.options.title}")
}
}Inicjalizacja
Router musi być zainicjalizowany przed użyciem, zazwyczaj w MainScreen:
val tabs = listOf(AsianMediaTab(), GameTab(), SettingsTab())
AppRouter.initialize(tabs)Bezpieczeństwo typów
goBack()nie pozwala opuścić ekranu głównego zakładkiWszystkie operacje są null-safe względem stanu inicjalizacji
See also
Interfejs implementowany przez wszystkie ekrany
Interfejs implementowany przez wszystkie zakładki
Model danych stanu nawigacji
Properties
Functions
Inicjalizuje router z podaną listą zakładek.
Nawiguje do nowego ekranu na aktywnej zakładce.
Atomowo przełącza zakładkę i nawiguje do nowego ekranu, używając ID zakładki.
Przełącza na zakładkę na podstawie jej tekstowego ID. Wygodne do użytku z zewnątrz (np. API, event bus).
Przełącza na zakładkę na podstawie jej obiektu.