Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CampusKit 万事屋

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 修复:数据库升级逻辑改为幂等(表/列存在即跳过),旧版本升级时 会自动补齐健康、购物、书影、倒计时、借还等数据表,不再出现"加载失败"。
  • 卸载应用或清除应用数据 = 清空所有记录,请自行留意备份。

后续 Roadmap

已经在 1.x 里做掉了:本地通知提醒(DDL / 上课 / 番茄钟)、数据导出与加密备份、 收入记录与多分类预算、课表 Excel 一键导入。

还想做的:

  • 学期设置与单周 / 双周编辑 UI
  • 课程管理页支持编辑与删除
  • 统计页增加按周 / 按月的趋势对比
  • 寝室水电费的周期提醒与均摊计算

About

CampusKit 万事屋 —— 个人校园生活管理 App(Flutter / Android,纯离线单机):课表、DDL、GPA、记账、习惯、健康、番茄钟、密码保险箱

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages