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(...) }— susiejaMenuraktą su meniu ekranu.onCartClick = { backStack.add(Screen.Cart) }— meniu „krepšelio" mygtukas įstumiaCartį steką.viewModel()sukuria vienąCartViewModel, dalinamą tarp meniu ir krepšelio. Koino kol kas nėra — jį įvesim 6 pamokoje; dabarviewModel()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,rememberNavBackStackgali 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 — sunavigation3 1.1.4.