SchoNavi 是一个 Flutter 应用。应用入口位于 lib/main.dart,应用壳位于 lib/app.dart。
lib/core:应用配置、路由、主题、依赖注入、AI 客户端、本地存储和外链能力。lib/domain:业务实体与 repository 接口。lib/data:候选事实数据、本地持久化、LLM repository 实现和 DTO。lib/features:首页、推荐、教授详情、聊天、邮件、对比、收藏和历史页面。lib/shared:跨页面复用组件。test:对应模块的测试。
项目采用 Flutter UI + Riverpod 状态管理/依赖注入 + GoRouter 路由。业务层通过 domain 中的 repository 接口隔离,数据层在 data 中提供候选事实、本地持久化和 LLM 等实现,由 core 中的配置与 provider 统一接线。
可在 .vscode/launch.json 中使用以下配置。LLM 模式通过 VS Code 输入框传入 API Key,不在文件中写入真实密钥;未配置 LLM_API_KEY 时,大模型功能会显式报错而不会回退到本地推荐。
{
"version": "0.2.0",
"configurations": [
{
"name": "SchoNavi Flutter (LLM, no key)",
"request": "launch",
"type": "dart",
"program": "lib/main.dart"
},
{
"name": "SchoNavi Flutter (LLM)",
"request": "launch",
"type": "dart",
"program": "lib/main.dart",
"toolArgs": [
"--dart-define=LLM_API_KEY=${input:llmApiKey}",
"--dart-define=LLM_BASE_URL=https://api.deepseek.com",
"--dart-define=LLM_MODEL=deepseek-chat"
]
}
],
"inputs": [
{
"id": "llmApiKey",
"type": "promptString",
"description": "LLM API Key",
"password": true
}
]
}真实后端模式通过 --dart-define=API_BASE_URL=https://api.example.com 开启。
API_BASE_URL 填后端 origin,不要包含 /api/v1;客户端会自行拼接
/api/v1/... 路径。