Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 3 / 14 Būsena ir ViewModel (MVI) ~50 min

Sukurk CartScreen.kt — gyva suma

Dabar — ekranas, kuris stebi būseną. feature/cart/presentation/CartScreen.kt.

  • val state by viewModel.uiState.collectAsStateWithLifecycle() — prisijungiam prie StateFlow. Kai būsena keičiasi, ekranas automatiškai persipiešia. WithLifecycle reiš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: €...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.