Flutter → Android · 正式版 1.4.0 · 个人大学生活综合管理 App
面向个人使用的大学生活管理应用:无社交、无商业化,全部数据保存在手机本地的 SQLite 数据库中,不上传任何服务。
一个 App 装下校园里的日常琐事 —— 课表、DDL、GPA、记账、习惯、健康、番茄钟、 密码保险箱……Material 3 双主题,纯离线单机运行。
| 模块 | 功能 |
|---|---|
| 首页仪表盘 | 一屏聚合:下一节课(时间/地点/倒计时)、DDL 倒计时、预算剩余(超支预警)、生活待办、快捷入口 |
| 学业 | 周课表(上课周数、学期可设置)、课程管理、DDL(推送提醒 + 批量操作)、GPA、资料库(导入 Word/PPT/PDF)、工具箱(进制 / dBm↔mW / 频率↔波长 / 文本编码 / 随机决策 / 欧姆定律 / dB↔倍数 / 颜色转换 / 电阻色环 / 矩阵计算 / 时间戳 / 聚会 AA) |
| 课表导入 | 从教务系统导出的 Excel(.xls/.xlsx)一键导入:自动识别课程、节次时间、周次、地点、老师,并自动设置学期开始日期 |
| 生活 | 记账与收款、预算、习惯、健康(体重 + BMI + 趋势图)、待办、借还、统计(饼图/折线图 + 周期账单 CSV 导出)、番茄钟、美食日记、呼吸练习、喝水与咖啡因、人情账本、出行清单(批量勾选) |
| 目标 | 项目里程碑、实时倒计时、会员订阅跟踪(扣费前 1 天提醒)、电子证件管理 |
| 收件箱 | 速记、清单(购物批量操作 + 书影)、日记本、密码保险箱(系统安全存储) |
设置(首页右上角齿轮):
- 主题模式:跟随系统 / 浅色 / 深色
- 背景图片:从相册选择任意图片作为应用背景(如纸片人老婆)
- 背景图开启时卡片/弹窗/底部栏自动半透明化
- 下课预告开关:每节课结束时通知"下节课是什么、在哪、几点开始"
- 通知测试:一键发送测试通知,验证通知权限
- 数据备份:一键导出全部数据为 JSON 文件,支持一键导入恢复
- 版本更新日志:设置 → 关于 可查看历次版本更新内容
- 首页"最近使用":自动记录最近打开的模块,一键直达
- 密码保险箱主密码锁(忘记密码可重置清空)
系统通知:DDL 截止前、上课前 15 分钟(含地点)、番茄钟阶段结束,均可通过 Android 系统通知栏提醒;DDL 与课时支持逐条选择"是否推送"。
- Flutter 3.47(Material 3,浅色/深色主题)
- flutter_riverpod 3(状态管理与依赖注入)
- go_router(路由)
- sqflite(本地 SQLite,数据不出手机)
- url_launcher(资料链接跳转)
- fl_chart(饼图 / 折线图统计)
- flutter_local_notifications + flutter_timezone(本地定时通知,精确闹钟)
- image_picker / path_provider / file_picker / share_plus / open_filex (拍照、文件导入、备份导出、本地文件打开)
- Flutter 3.47+(Dart SDK
>=3.5.0 <4.0.0) - Android SDK,
minSdk 24(Android 7.0+) - 不需要任何服务端、账号或第三方 API Key
git clone https://github.com/yunlisky/CampusKit.git
cd CampusKit
flutter pub get
flutter run # 连上设备或模拟器直接跑
flutter test # 单元测试
flutter build apk --release
# 产物:build/app/outputs/flutter-apk/app-release.apk本仓库只含源码,不含 APK。包名 com.laplace.college_life,应用显示名称「万事屋」。
自行分发前请配置签名:在 android/ 下放 key.properties 并在
android/app/build.gradle.kts 里引用;key.properties、*.jks、*.keystore
都已在 .gitignore 中排除。
首次打开会请求通知权限(Android 13+),拒绝也不影响其他功能,之后在 DDL / 课时的编辑弹窗里可以逐条开启推送提醒。
test/ 下 4 个单元测试覆盖关键的非 UI 逻辑:
| 测试 | 覆盖内容 |
|---|---|
xls_parser_test.dart |
教务系统导出的课表 Excel 解析(样例:test/assets/sample_schedule.xls) |
course_occurrence_test.dart |
某周某天是否有课、下一节课推算 |
caffeine_test.dart |
咖啡因半衰期代谢估算 |
backup_encryption_test.dart |
备份文件加解密往返一致性 |
flutter test- 全部数据存于应用私有目录的 SQLite(
college_life.db),不联网、不上传、无账号、无埋点 AndroidManifest.xml(main)只声明POST_NOTIFICATIONS、SCHEDULE_EXACT_ALARM、RECEIVE_BOOT_COMPLETED、VIBRATE;INTERNET权限仅出现在 debug / profile 构建的清单里(Flutter 热重载需要),release 包不含联网权限- 唯一的外部跳转是「资料库」里你手动点击的链接,交给系统浏览器打开
lib/
├── main.dart / app.dart / app_shell.dart # 入口、路由、底部导航(首页/学业/生活/目标/收件箱)
├── core/
│ ├── app_tab.dart
│ ├── theme/app_theme.dart
│ ├── services/notification_service.dart # 本地定时通知(DDL/上课/番茄钟)
│ └── utils/ # 下一节课计算、时间格式化、id 生成
├── data/
│ ├── db/app_database.dart # SQLite 建表与迁移(无演示数据)
│ ├── models/ # 25 个模型文件(下表列出主要几类)
│ ├── providers.dart # 数据库与 repository 注入点
│ └── repositories/ # 学业/财务/生活/目标 数据访问层
└── features/
├── dashboard/ # 首页(5 个卡片组件)
├── academic/ # 课表 / DDL / GPA / 资料
├── life/ # 财务/习惯/健康/待办/借还/统计/番茄钟
├── goals/ # 项目 + 里程碑 / 实时倒计时
└── inbox/ # 速记 / 清单(购物、书影)
分层原则:features/(UI)→ data/repositories/(数据访问)→
data/models/(模型),core/ 放跨模块共享代码。功能模块之间通过
Riverpod 注入点解耦,新增功能只需在 features/ 下加一个模块并在
app_shell.dart 注册。
金额一律用「分」(int)存储;周几用 1=周一…7=周日;时间存毫秒时间戳。
| 模型 | 用途 | 关键字段 |
|---|---|---|
| Course / CourseSession | 课表 | 学分、教室、周几、起止分钟、周数 |
| Deadline | 作业/考试 DDL | kind、dueAt、priority、done |
| CourseResource | 资料入口 | kind(链接/本地)、link |
| Expense / MonthlyBudget | 记账与预算 | amountCents、category、month |
| Income | 收款记录 | amountCents、category(生活费/兼职/奖学金)、occurredAt |
| Habit / HabitRecord | 习惯打卡 | emoji、unit、weeklyTarget、date、value |
| HealthRecord | 健康记录 | date、weight(每日体重 kg,配合身高算 BMI) |
| ShoppingItem | 购物清单 | name、category、done |
| MediaItem | 书单/影单 | kind(书/电影)、status(想看/进行中/已完成) |
| LifeTodo | 水电/洗衣/快递 | kind、title、detail、done |
| Lending | 借还管理 | item、borrower、dueDate、done |
| Project / Milestone | 目标拆解 | kind、status、targetDate |
| ImportantDate | 重要日期提醒 | category、date、remindDays |
| InboxNote | 灵感速记 | content、tags、done |
| FoodLog | 美食日记 | title、rating、comment、photo_path |
| JournalEntry | 日记本 | date(每天一篇)、content、mood |
| Subscription | 会员订阅 | name、amountCents、renewDate、notify |
| WaterCaffeine | 喝水咖啡因 | date、waterCups、caffeineMg |
| Favor | 人情账本 | person、direction(给出/收到)、amountCents |
| IdCard | 电子证件 | type、name、number、photo_path |
| OutingItem | 出行清单 | name、preset、done |
- 数据库文件:应用私有目录下的
college_life.db。 - 新安装的应用不含任何演示数据;从 v0.1 升级时会自动清除旧版内置的 演示数据(按已知 id 精确删除),保留你自己录入的数据。
- 通知提醒:DDL 与课时编辑时可选择"是否推送";开启后由系统在本地调度, 不需要联网;重启手机后会自动恢复已排期的提醒。
- 通知采用精确闹钟(Android 12+ 需授予"闹钟与提醒"权限),准点触发; 如果收不到,先在 设置 → 通知测试 里验证权限。
- v0.4.1 修复:数据库升级逻辑改为幂等(表/列存在即跳过),旧版本升级时 会自动补齐健康、购物、书影、倒计时、借还等数据表,不再出现"加载失败"。
- 卸载应用或清除应用数据 = 清空所有记录,请自行留意备份。
已经在 1.x 里做掉了:本地通知提醒(DDL / 上课 / 番茄钟)、数据导出与加密备份、 收入记录与多分类预算、课表 Excel 一键导入。
还想做的:
- 学期设置与单周 / 双周编辑 UI
- 课程管理页支持编辑与删除
- 统计页增加按周 / 按月的趋势对比
- 寝室水电费的周期提醒与均摊计算