Sukurk CartScreen.kt — gyva suma
Dabar — ekranas, kuris stebi būseną. feature/cart/presentation/CartScreen.kt.
val state by viewModel.uiState.collectAsStateWithLifecycle()— prisijungiam prieStateFlow. Kai būsena keičiasi, ekranas automatiškai persipiešia.WithLifecyclereiškia „nustok klausytis, kai ekranas fone" (taupom resursus).if (state.isEmpty) { ... }— tuščias krepšelis gauna savo vaizdą.LazyColumn { items(state.items) { ... } }— kiekvienai prekei kortelė su pavadinimu, kaina ir kiekio valdikliais (−/+).- Kiekvienas paspaudimas — įvykis aukštyn:
viewModel.onEvent(CartEvent.IncreaseQuantity(...)). Ekranas nieko neskaičiuoja pats — tik siunčia įvykius ir rodo būseną. - Apačioje —
Total: €...išstate.totalPrice.
Čia ir yra MVI grožis: paspaudei + → įvykis → ViewModel pagamina naują būseną → totalPrice perskaičiuota → suma ekrane atsinaujina. Gyvai, be jokio rankinio „atnaujink sumą".
Patikrink. Kad pamatytum krepšelį veikiant, laikinai pridėk kelias prekes (kitą pamoką tai darys meniu). Pavyzdžiui, CartScreen.kt peržiūroje ar per laikiną mygtuką iškviesk onEvent(CartEvent.AddItem(pica)). Tada:
Paspaudi „+" ant Margherita (€8.50):
kiekis: 1 → 2 Total: €8.50 → €17.00 (atsinaujina iškart)
Paspaudi „−" iki 0:
prekė dingsta iš krepšelio
Suma juda kartu su kiekiu — realaus laiko, be jokio papildomo kodo.
Patarimas. Mokėjimo mygtukas („Pay") čia sąmoningai praleistas — Stripe ateis 11 pamokoje. Kol kas krepšelis pilnai veikia atmintyje. Kitą pamoką sujungsim ekranus: meniu „Add to cart" mygtukas siųs
CartEvent.AddItem, o navigacija (Nav3) leis pereiti meniu → krepšelis.