/** * 第 5 章配套代码 · 跨 Pager 共享状态(全局 Store) * * 文件位置:shared/src/commonMain/kotlin/com/example/kuikly/store/UserStore.kt * * 演示如何用单例 object 装 observable 字段,做"全局响应式 Store"。 * 多个 Pager 同时读 UserStore.xxx,会被自动追踪 → 一处改、处处刷新。 * * 类比:Vue Pinia / React Zustand / Android ViewModel + StateFlow */ package com.example.kuikly.store import com.tencent.kuikly.core.reactive.collection.observableListOf import com.tencent.kuikly.core.reactive.handler.observable object UserStore { // ─── 用户基础信息 ─── var loggedIn by observable(false) var userId by observable("") var nickname by observable("游客") var avatar by observable("") // ─── 偏好设置 ─── var darkMode by observable(false) var fontScale by observable(1.0f) // ─── 消息中心 ─── val unreadMessages = observableListOf() // ─── 派生属性:未读数量 ─── val unreadCount: Int get() = unreadMessages.size // ─── 业务方法 ─── fun login(uid: String, name: String, av: String) { userId = uid nickname = name avatar = av loggedIn = true } fun logout() { userId = "" nickname = "游客" avatar = "" loggedIn = false unreadMessages.clear() } fun pushMessage(msg: String) { unreadMessages.add(0, msg) } fun clearMessages() { unreadMessages.clear() } fun toggleDarkMode() { darkMode = !darkMode } } /* ──────────────────────────────────────────────────────── * 使用示例(在任何 Pager 里): * * class HomePage : Pager() { * override fun body() = { * Text { attr { * text("Hi, ${UserStore.nickname}") * color(if (UserStore.darkMode) Color.WHITE else Color.BLACK) * } } * * Text { attr { text("未读 ${UserStore.unreadCount} 条") } } * * View { * event { click { UserStore.toggleDarkMode() } } * Text { attr { text("切换主题") } } * } * } * } * * ★ 任何一个 Pager 调 UserStore.login(...),所有页面 UI 自动同步更新。 * ──────────────────────────────────────────────────────── */