一款极简风格的个人记账 App,使用 Kotlin Multiplatform + Compose Multiplatform 构建,Android / iOS / Desktop 三端共享代码和 UI。
暖灰配色,手写矢量图标,SQLDelight 本地持久化。
以下截图来自开发前的 HTML 交互原型,呈现最终设计目标。
- 首页看板 — 月度支出 / 收入 / 结余,按日分组流水,每日支出柱状图
- 记一笔 — 支出 / 收入切换,分类 + 小类选择,账户选择,时间 / 备注填写
- 编辑 / 删除记录 — 首页点击记录进入编辑模式,二次确认删除
- 月份切换 — 按月查看历史记录,带全年汇总的月份选择器
- 隐私遮蔽 — 隐私分类(医疗、人情、理财)金额自动遮蔽为 ••••,首页支出 / 收入 / 结余三项各自独立遮蔽开关
- 账户管理 — 增删改查账户,设置默认账户,关联记录检查
- 分类管理 — 大类 / 小类增删改查、拖拽排序、可调分栏、隐私标记
- 分类结构 — 8 个支出大类 + 4 个收入大类,各含多个小类,首启自动初始化
- 自动记账 — 三种触发类型(每周多选 / 每月多选 / 每隔 N 天)+ 启动时追赶引擎,App 离线期间漏掉的触发会在下次启动时补齐
- 空状态占位 UI — 首页 / 自动记账 / 账户列表无数据时显示引导占位
- 过渡动画 — 设置子页 Slide 转场 + 底部 Tab Crossfade + 记录列表 itemPlacement
- CSV 导入导出 — 全部记录一键导出 CSV,也支持从 CSV 导入历史记录(按名字匹配分类 / 账户,非法行整行跳过)
- 本地通知提醒 — Android / iOS 每日定时提醒记账,最多 3 条、相邻不少于 1 小时,Desktop 隐藏入口
- 中国法定工作日 / 节假日触发类型
- 嵌入字体(Noto Sans SC / Inter)
- iCloud / Google Drive / 本地备份恢复
| 层次 | 技术 |
|---|---|
| 跨平台框架 | Kotlin Multiplatform (KMP) |
| UI | Compose Multiplatform |
| 数据库 | SQLDelight 2.1 — Android / iOS / JVM 三端驱动 |
| 导航 | Voyager (TabNavigator + Navigator) |
| 状态管理 | ViewModel + StateFlow + Flow.combine |
| 时间处理 | kotlinx-datetime(本地时区感知) |
| 图标 | 手写 ImageVector(20+ 个线性图标) |
./gradlew :composeApp:assembleDebug./gradlew :composeApp:run用 Xcode 打开 /iosApp 目录运行。
composeApp/src/commonMain/
├── data/
│ ├── Repositories.kt # Category / Account / Record / Preference
│ ├── DomainTypes.kt # 领域类型(RecordDetail / DayGroup / MonthSummary)
│ ├── DefaultDataSeeder.kt # 首启数据初始化
│ └── Time.kt # 时区工具
├── db/ # SQLDelight expect/actual 工厂
├── di/AppContainer.kt # 依赖注入容器
├── ui/
│ ├── home/ # 首页 + HomeViewModel
│ ├── entry/ # 记一笔 + EntryViewModel
│ ├── settings/ # 设置各页 + AccountsViewModel
│ ├── nav/AppScaffold.kt # 底部 Tab + 页面路由
│ └── components/ # 公共组件 + LineIcons
└── sqldelight/ # .sq 文件(6 张表)