一款跨平台个人记账应用,支持 Android、iOS、Windows、macOS、Linux 及 Web 多端运行。
| 层级 | 技术 |
|---|---|
| 后端语言 | Go 1.25 |
| 通信协议 | ConnectRPC(兼容 gRPC / HTTP / REST) |
| ORM | GORM |
| 数据库 | SQLite |
| 接口定义 | Protobuf + protoc-gen-gorm |
| 前端框架 | Flutter 3.10+ |
| 前端状态管理 | flutter_bloc / Cubit |
| 前端路由 | go_router |
| 前端网络 | Dio |
| 本地存储 | Hive CE + Flutter Secure Storage |
| 认证 | Casdoor SSO |
| 模块 | 功能 |
|---|---|
| 认证 | Casdoor 登录 / 登出 |
| 资产账户 | 资金载体管理,支持自定义图标和当前余额,可编辑/删除 |
| 分类 | 支出/收入分类管理(系统预设 + 用户自定义),支持图标选择 |
| 标签 | 自由标签,用于细化分类 |
| 记账 | 新增 / 编辑 / 删除交易记录,支持支出/收入/转账三种类型 |
| 流水 | 交易列表,支持按类型(支出/收入/转账)筛选 |
| 统计 | 月度/年度收支汇总、分类占比、账户分布、标签分布,支持按类型切换 |
| 内部转账 | 账户间转账,自动更新余额 |
| 借贷 | 借入/借出管理,支持标记归还 |
| 周期性记账 | 固定收支自动记账 |
| 主题 | 浅色/深色/跟随系统,支持多种主题颜色 |
| 语言 | 中文/英文切换 |
| 设置 | 分类/标签/周期性记账管理、主题/语言设置、关于、退出登录 |
money-tracker/
├── api/ # 后端接口实现
│ ├── asset_account.go
│ ├── category.go
│ ├── common.go
│ ├── recurring_task.go
│ ├── tag.go
│ └── transaction.go
├── bootstrap/ # 应用初始化
├── config.example.yaml # 配置文件示例
├── globals/ # 全局变量
├── internal/ # 内部包(config、db、models 等)
│ ├── db/ # 数据访问层
│ │ ├── asset_account.go
│ │ ├── category.go
│ │ ├── db.go
│ │ ├── recurring_task.go
│ │ ├── stats_cache.go # 统计缓存
│ │ ├── tag.go
│ │ └── transaction.go
│ ├── models/
│ └── services/ # 业务逻辑层
│ ├── asset_account.go
│ ├── category.go
│ ├── recurring_task.go
│ ├── tag.go
│ └── transaction.go
├── proto/wsp/native/ # Protobuf 接口定义
│ ├── enum.proto # 枚举定义
│ ├── transaction_api.proto
│ └── ...
├── server/ # HTTP 服务器与路由注册
├── utils/ # 工具函数
├── frontend/ # Flutter 前端项目
│ ├── lib/
│ │ ├── api/ # 网络请求仓库
│ │ ├── blocs/ # 状态管理(Cubit)
│ │ ├── l10n/ # 国际化(中文/英文)
│ │ ├── models/ # 数据模型
│ │ ├── pages/ # 页面
│ │ │ ├── assets/ # 资产页
│ │ │ ├── borrow_lend/ # 借贷页
│ │ │ ├── categories/ # 分类管理页
│ │ │ ├── login/ # 登录页
│ │ │ ├── recurring_tasks/ # 周期性记账页
│ │ │ ├── settings/ # 设置页(含主题、语言、关于)
│ │ │ ├── stats/ # 统计页
│ │ │ ├── tags/ # 标签管理页
│ │ │ ├── transaction_form/ # 交易表单页
│ │ │ └── transactions/ # 交易流水页
│ │ ├── proto/ # 生成的 Protobuf Dart 代码
│ │ ├── router/ # 路由定义
│ │ ├── services/ # 服务层(存储、认证、主题等)
│ │ └── utils/ # 工具函数
│ └── pubspec.yaml
└── main.go # 后端入口
- 复制配置文件并修改:
cp config.example.yaml data/config.yaml
# 编辑 data/config.yaml,填入 Casdoor 配置等- 运行服务:
go run main.go服务默认监听 127.0.0.1:10980。
- 进入前端目录并安装依赖:
cd frontend
flutter pub get- 生成图标包(flutter_iconpicker 依赖):
dart run flutter_iconpicker:generate_packs --packs material- 运行应用:
flutter run构建发布版时需附加
--no-tree-shake-icons标志,避免字体树摇优化导致图标缺失。
配置文件参考 config.example.yaml,主要配置项:
| 配置 | 说明 |
|---|---|
scheme.addr |
服务监听地址 |
scheme.port |
服务监听端口 |
db.type |
数据库类型(sqlite3) |
db.name |
数据库文件名 |
casdoors.endpoint |
Casdoor 服务地址 |
casdoors.client_id |
Casdoor Client ID |
casdoors.client_secret |
Casdoor Client Secret |
casdoors.organization_name |
Casdoor 组织名 |
casdoors.application_name |
Casdoor 应用名 |
私有项目,不对外发布。