Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 4 / 14 Navigacija (Nav3) ~45 min

Sukurk PicaNavHost.kt — grafas

Dabar — grafas. navigation/PicaNavHost.kt (kodo stulpelyje).

  • rememberNavBackStack(Screen.Menu) — stekas, prasidedantis nuo meniu.
  • NavDisplay(backStack, entryProvider { ... }) — piešia steko viršūnę.
  • entry<Screen.Menu> { MenuScreen(...) } — susieja Menu raktą su meniu ekranu.
  • onCartClick = { backStack.add(Screen.Cart) } — meniu „krepšelio" mygtukas įstumia Cart į steką.
  • viewModel() sukuria vieną CartViewModel, dalinamą tarp meniu ir krepšelio. Koino kol kas nėra — jį įvesim 6 pamokoje; dabar viewModel() pakanka (ViewModel be priklausomybių).

Reikia mažo MenuScreen pakeitimo — kad jis mokėtų vesti į krepšelį ir dėti į jį picas. Pridėk parametrus ir mygtukus:

@Composable
fun MenuScreen(
    cartViewModel: CartViewModel,
    onCartClick: () -> Unit,
    items: List<MenuItem> = sampleMenu   // tikras sąrašas ateis 5 pamokoje
) {
    Scaffold(
        topBar = {
            TopAppBar(
                title = { Text("Pica Menu") },
                actions = { IconButton(onClick = onCartClick) {
                    Icon(Icons.Default.ShoppingCart, contentDescription = "Cart")
                } }
            )
        }
    ) { padding -> /* … LazyColumn su kortelėmis … */
        // kortelėje:
        Button(onClick = { cartViewModel.onEvent(CartEvent.AddItem(item)) }) { Text("Add to cart") }
    }
}

Galiausiai — MainActivity iš 1 pamokos: pakeisk Greeting("Pica") į PicaNavHost(). Navigacija pagaliau įjungta.

Patikrink. Paleisk. Turi:

1. Atsidaro MENIU su picomis + krepšelio ikona viršuje.
2. Paspaudi „Add to cart" ant Margherita → ikona rodo, kad krepšelyje yra.
3. Paspaudi krepšelio ikoną → atsidaro KREPŠELIS su Margherita ir suma €8.50.
4. Paspaudi telefono Back → grįžti į MENIU.

Du ekranai, vienas srautas.

Spąstai (Nav3 alpha). Kadangi Navigation 3 dar alpha, tikėtinos smulkios API klaidos: NavDisplay, entryProvider, rememberNavBackStack gali būti kitame pakete arba kitokiu vardu tavo versijoje. Jei importas raudonas — nespėliok, atsidaryk oficialius Nav3 dokus ir pasitikrink tikslų vardą tavo bibliotekos versijai. Tai normalu su alpha bibliotekomis; kurso kodas — su navigation3 1.1.4.