Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 11 / 14 QR skenavimas ~45 min

Sukurk TableSession.kt — nuskenuotas staliukas

Kodo stulpelyje — TableSession.kt. Maža, bet svarbi: ji laiko nuskenuotą staliuką kaip StateFlow, kad bet kuris ekranas galėtų jį stebėti. setTable("table:12") nuima table: prefiksą ir palieka 12.

Įtrauk į Koiną — vienas single, kad visa programa dalintųsi tuo pačiu staliuku:

// feature/scan/di/ScanModule.kt
val scanModule = module {
    single { TableSession() }
}
// ir PicaApplication modules(...) sąraše pridedam scanModule

Dabar prisimink 8a pamoką: ten AuthViewModel.logout() palikom tik repository.logout(). Tikroji versija atsijungiant išvalo ir staliuką — juk naujas vartotojas sėdi kitur:

fun logout(onLoggedOut: () -> Unit) = viewModelScope.launch {
    repository.logout()
    tableSession.clearTable()   // ← dabar, kai TableSession egzistuoja
    onLoggedOut()
}
// authModule: viewModel { AuthViewModel(get(), get()) }  // + TableSession

Ir krepšelis pagaliau gauna tikrą staliuką. 9 pamokoje placeOrder(..., tableNumber = null); dabar:

val table = tableSession.tableNumber.value
orderRepository.placeOrder(items, table)     // table_number keliauja į POST /orders

Patarimas. Kodėl TableSession — atskira single, o ne tiesiog laukas krepšelyje? Nes staliukas — bendras kontekstas: jį nuskaito ScanScreen, naudoja krepšelis ir apmokėjimas. Vienas bendras šaltinis (single) reiškia, kad visi mato tą patį, ir nereikia jo perdavinėti per navigaciją.