存档说明: 本文档为早期产品规划记录,细节可能滞后于当前版本。
请以 README.md、docs/releases/ 与应用内功能为准。
最后校对:2026-07-07(当前主线约 v2.0)。
文档信息
| 项目 | 内容 |
|---|
| 产品名称 | 轻屿课表 |
| 文档版本 | 存档(原 v1.1.x 规划) |
| 更新日期 | 2026-07-07 |
| 目标平台 | Android (小米 HyperOS / 澎湃OS) |
一、产品概述
一款专为大学生设计的课程表应用,支持小米澎湃OS超级岛(Live Activities)功能,让用户在不打开应用的情况下即可查看当前课程信息。
- 便捷性:一目了然的课程表视图
- 实时性:通过小米超级岛实时显示当前课程
- 个性化:支持自定义课程颜色和时间设置
- 独立性:支持多个课表分别维护自己的课程与设置
二、功能需求
| 功能 | 描述 | 优先级 |
|---|
| 添加课程 | 输入课程名称、教师、地点、时间等信息 | P0 |
| 编辑课程 | 修改已有课程的所有信息 | P0 |
| 删除课程 | 删除不需要的课程 | P0 |
| 课程颜色 | 为不同课程设置不同颜色标识 | P1 |
| 功能 | 描述 | 优先级 |
|---|
| 周次切换 | 支持按学期周数配置查看 | P0 |
| 多课表切换 | 支持多个独立课表的快速切换与管理 | P0 |
| 日视图 | 按天展示课程列表 | P1 |
| 周视图 | 网格形式展示整周课程 | P0 |
| 当前周高亮 | 标记当前正在进行的课程 | P1 |
| 功能 | 描述 | 优先级 |
|---|
| 实时显示 | 显示当前正在进行的课程 | P0 |
| 下一节课 | 预告下一节课信息 | P0 |
| 自动更新 | 课程结束后自动切换显示 | P0 |
| 点击跳转 | 点击通知打开应用 | P1 |
| 功能 | 描述 | 优先级 |
|---|
| 本地存储 | 使用SharedPreferences持久化数据 | P0 |
| 数据备份 | 导出当前课表数据为JSON | P1 |
| 数据恢复 | 覆盖当前课表或导入为新课表 | P1 |
三、用户场景
场景一:添加新学期课程
用户:小明,大三学生
时间:新学期开学前
操作:
1. 打开应用
2. 点击右上角"+"按钮
3. 输入"高等数学"课程信息
4. 设置周一 1-2节,张教授,教301
5. 设置第1-16周
6. 保存课程
场景二:上课时查看课程信息
用户:小红,正在去教室的路上
时间:周一上午 7:55
操作:
1. 亮屏手机
2. 在小米超级岛上看到:
- 当前课程:高等数学
- 教室:教301
- 时间:8:00-9:40
- 下一节:大学英语 10:00
3. 直接前往教室,无需打开应用
场景三:查看本周课程安排
用户:小刚,周日晚上规划下周学习
时间:周日 21:00
操作:
1. 打开应用
2. 查看本周课程表网格
3. 切换到下周查看课程变化
4. 根据课程安排制定学习计划
四、界面设计
┌─────────────────────────────────────┐
│ 课程表 [今天][+] │
├─────────────────────────────────────┤
│ < 第 3 周 > │
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
│节次 │ 周一 │ 周二 │ 周三 │ 周四 │ 周五 │ 周六 │ 周日 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 1 │ │ │ │ │ │ │ │
│08:00│ 高数│ │ 英语│ │ │ │ │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 2 │ │ │ │ │ │ │ │
│08:55│ 高数│ │ 英语│ │ │ │ │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 3 │ │ 物理│ │ 编程│ │ │ │
│10:00│ │ │ │ │ │ │ │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ ... │ │ │ │ │ │ │ │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘
┌─────────────────────────────────────┐
│ < 添加课程 保存 │
├─────────────────────────────────────┤
│ 基本信息 │
│ ┌─────────────────────────────────┐ │
│ │ 课程名称 * │ │
│ │ [高等数学___________________] │ │
│ ├─────────────────────────────────┤ │
│ │ 授课教师 │ │
│ │ [张教授_____________________] │ │
│ ├─────────────────────────────────┤ │
│ │ 上课地点 │ │
│ │ [教301______________________] │ │
│ └─────────────────────────────────┘ │
│ │
│ 上课时间 │
│ ┌─────────────────────────────────┐ │
│ │ 星期 [周一 ▼] 开始节 [1 ▼] │ │
│ │ 结束节 [2 ▼] │ │
│ │ 时间: 08:00 - 09:40 │ │
│ └─────────────────────────────────┘ │
│ │
│ 周次设置 │
│ ┌─────────────────────────────────┐ │
│ │ 开始周 [第1周 ▼] 结束周 [第16周▼]│ │
│ │ [ ] 单周 [ ] 双周 │ │
│ └─────────────────────────────────┘ │
│ │
│ 课程颜色 │
│ ┌─────────────────────────────────┐ │
│ │ [■][■][■][■][■][■][■][■][■] │ │
│ │ 蓝 绿 橙 粉 紫 青 红 棕 灰 │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ ┌─────────────────────────────┐ │
│ │ 📚 高等数学 │ │
│ │ 📍 教301 | 👨🏫 张教授 │ │
│ │ ⏰ 08:00 - 09:40 │ │
│ │ ─────────────────────────── │ │
│ │ 下一节: 大学英语 (10:00) │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
五、数据模型
{
"id": "uuid-string",
"name": "高等数学",
"teacher": "张教授",
"location": "教301",
"dayOfWeek": 1,
"startSection": 1,
"endSection": 2,
"startTime": "08:00",
"endTime": "09:40",
"color": "#2196F3",
"startWeek": 1,
"endWeek": 16,
"isOddWeek": false,
"isEvenWeek": false
}
| 字段 | 类型 | 说明 |
|---|
| id | String | 唯一标识符 (UUID) |
| name | String | 课程名称 |
| teacher | String | 授课教师 |
| location | String | 上课地点 |
| dayOfWeek | int | 星期几 (1-7) |
| startSection | int | 开始节次 (1-10) |
| endSection | int | 结束节次 (1-10) |
| startTime | String | 开始时间 (HH:mm) |
| endTime | String | 结束时间 (HH:mm) |
| color | String | 颜色代码 (#RRGGBB) |
| startWeek | int | 开始周次 |
| endWeek | int | 结束周次 |
| isOddWeek | bool | 是否单周 |
| isEvenWeek | bool | 是否双周 |
六、技术架构
┌─────────────────────────────────────────────────┐
│ Flutter UI │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ 课程表页 │ │ 添加课程 │ │ 课程卡片 │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
├─────────────────────────────────────────────────┤
│ State Management │
│ (Provider) │
├─────────────────────────────────────────────────┤
│ Services │
│ ┌──────────────────┐ ┌──────────────────────┐ │
│ │ StorageService │ │ MiuiLiveActivities │ │
│ │ (SharedPreferences)│ │ (MethodChannel) │ │
│ └──────────────────┘ └──────────────────────┘ │
├─────────────────────────────────────────────────┤
│ Platform Layer │
│ ┌──────────────────────────────────────────┐ │
│ │ Android Native (NotificationManager) │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
| 组件 | 技术方案 | 说明 |
|---|
| UI框架 | Flutter | 跨平台UI框架 |
| 状态管理 | Provider | 轻量级状态管理 |
| 本地存储 | SharedPreferences | 键值对存储 |
| 平台通信 | MethodChannel | Flutter与原生通信 |
| 通知实现 | Android Notification | 小米超级岛底层 |
lib/
├── main.dart # 应用入口
├── models/
│ └── course.dart # 课程数据模型
├── providers/
│ └── timetable_provider.dart # 状态管理
├── screens/
│ ├── timetable_screen.dart # 主界面
│ └── add_course_screen.dart # 添加课程
├── services/
│ ├── storage_service.dart # 存储服务
│ └── miui_live_activities_service.dart # 超级岛服务
└── widgets/
└── course_card.dart # 课程卡片组件
七、权限说明
| 权限 | 用途 | 必要性 |
|---|
| POST_NOTIFICATIONS | 发送通知 (Android 13+) | 必需 |
| VIBRATE | 通知振动 | 可选 |
| FOREGROUND_SERVICE | 前台服务 | 可选 |
- 首次启动:申请通知权限
- 首次显示超级岛:确保通知渠道创建成功
八、兼容性
| 平台 | 最低版本 | 推荐版本 |
|---|
| Android | 8.0 (API 26) | 小米澎湃OS |
| Flutter SDK | 3.0.0 | 3.27.0+ |
| 设备 | 超级岛支持 | 备注 |
|---|
| 小米澎湃OS设备 | ✅ 完全支持 | 推荐使用 |
| 其他Android设备 | ⚠️ 仅通知 | 无超级岛效果 |
| iOS设备 | ❌ 不支持 | 需单独适配 |
九、版本规划
- ✅ 基础课程表功能
- ✅ 课程增删改查
- ✅ 小米超级岛支持
- ✅ 本地数据存储
- 📋 课程数据导入/导出
- 📋 课表分享功能
- 📋 桌面小组件
- 📋 教务系统对接
- 📋 自动导入课程
- 📋 课程提醒通知
- 📋 iOS Live Activities支持
- 📋 多学期管理
- 📋 云同步功能
十、风险评估
| 风险 | 影响 | 应对措施 |
|---|
| 小米超级岛API变更 | 功能失效 | 关注小米开发者文档,及时更新 |
| Android版本兼容性 | 部分设备无法使用 | 设置最低API版本,做好兼容处理 |
| 数据丢失 | 用户课程丢失 | 建议实现数据备份功能 |
附录
| 术语 | 说明 |
|---|
| 超级岛 | 小米澎湃OS的实时活动显示功能 |
| 节次 | 大学课程的时间单位,通常1节=45分钟 |
| 单双周 | 部分课程隔周上课的安排方式 |