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

MVI: viena kryptis, viena tiesa

Meniu gražus, bet negyvas. Kad programėlė ką nors „atsimintų" (kas įdėta į krepšelį) ir persipieštų pasikeitus — reikia būsenos ir vietos, kur ji gyvena: ViewModel.

Pica visur naudoja vieną šabloną — MVI (Model–View–Intent). Idėja: duomenys teka viena kryptimi.

  Vartotojas paspaudžia          (Event)
        │
        ▼
  ViewModel apdoroja, pagamina naują  (State)
        │
        ▼
  UI persipiešia pagal naują būseną   (View)
        │
        └──────────── vartotojas vėl veikia ──────────┐
                                                       ▲

Trys dalys:

  • Event — kas nutiko: „pridėk picą", „padidink kiekį". Aprašom sealed interface CartEvent — baigtinis įvykių sąrašas.
  • State — visa, ką ekranas turi rodyti: krepšelio prekės, suma. Aprašom data class CartUiState.
  • ViewModel — priima Event, pagamina naują State. Būseną laiko MutableStateFlow, o UI ją stebi.

Kodėl taip? ViewModel išgyvena ekrano pasukimą (būsena neišsitrina), viena tiesos vieta (nėra „kur tikroji suma?"), ir logiką lengva testuoti be UI.

Pradedam nuo krepšelio — jis puikus pirmas pavyzdys, nes yra grynai atmintyje: jokio tinklo, jokios duomenų bazės. Tik Event → ViewModel → State → UI. (Tinklas ir mokėjimai prisijungs vėliau — dabar svarbu pats šablonas.)