SchedU是一个Flutter编写的多平台课程表,采用Material 3风格设计,支持从教务系统导入课程。
详见效果图
- 今日课程
- 明日课程预告
- 周课程表
- 日课程小组件
- 周课程小组件 (开发中)
- 课程管理
- JSON格式的课程导入/导出
- 从教务系统导入课程(AI模式和JavaScript模式)
- 基于OCR+AI的图片导入课程 (开发中)
- 主题切换(浅色/深色/系统)
SchedU集成了openai_dart,支持调用兼容OpenAI标准的API导入课程,可以在APP设置中配置API Key和API地址。 本APP附带有免费AI服务,免费API服务仅供体验,有并发和使用次数限制,请合理使用。(免费AI服务使用多个平台的国产模型,由系统随机分配)
注意:使用AI导入功能会把导入时打开的页面HTML内容发送到第三方AI服务进行解析,请确保你信任所使用的AI服务提供商,并了解相关的隐私政策。
(暂未对IOS的WKWebView进行适配,后续Web版本不会对教务导入进行适配)
- 通过内置浏览器(WebView)打开学校教务系统,登录后进入课程表页面。
- 在点击 “解析导入” 按钮后,获取当前页面的HTML内容。
- 将HTML内容在本地执行JavaScript进行初步清洗,提取课程相关的HTML片段。(具体见schedule_parse.js)
- 将清洗后的HTML片段发送到AI服务进行智能解析,获取结构化的课程数据。
- 将解析得到的课程数据保存到本地数据库,并更新课程表显示。
- 界面层 (
lib/view/):按功能组织的屏幕部件(日课程、周课程、我的、教务导入) - 状态管理 (
lib/bloc/):使用BLoC模式进行状态管理,包含独立的事件/状态/Bloc文件 - 服务层 (
lib/service/):AI聊天、课程导入、OpenAI集成等业务逻辑的实现 - 仓库层 (
lib/repository/):数据访问抽象(课程使用SQLite,设置使用SharedPreferences) - 模型层 (
lib/model/):使用json_serializable进行JSON序列化的数据类
详见导入导出文档
- 硬编码为中文(zh_CN)
- 设置了支持中文的 Material 本地化代理
- 所有界面文本应使用中文
(ps: 因为我觉得Flutter的国际化支持不太好用,而且我只打算做中文版,所以就不做国际化的支持了)
感谢提供大模型服务免费使用或试用的平台:
感谢以下开源项目和库: flutter_bloc、 dio、 json_annotation、 flutter_svg、 sqflite、 shared_preferences、 equatable、 path、 cupertino_icons、 file_picker、 openai_dart、 build_runner、 json_serializable、 flutter_gen_runner、 gson、 package_info_plus
本项目采用 MIT 许可证,详见 LICENSE
Copyright (c) 2025 gnahz77
