📖 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.)