如何从源码编译运行Echo Loop:Flutter+Riverpod+Drift开发者快速开始完整指南
【免费下载链接】Echo-LoopEcho Loop 是一款科学、高效的 AI 英语听说训练 App,通过精听、跟读、盲听、复述和间隔复习,自动驱动学习者把每一段音频真正练懂、练熟、练到会说。项目地址: https://gitcode.com/echo-loop/Echo-Loop
Echo Loop 是一款科学高效的 AI 英语听说训练 App,基于 Flutter 构建,使用 Riverpod 管理状态、Drift 做本地数据持久化。本文带新手从源码编译运行 Echo Loop 完整走一遍:克隆仓库、配置编译期环境变量、生成代码、一键启动到 iOS / Android / macOS,并附上测试与质量检查命令,帮助你快速上手这个 Flutter 开源项目。
🧰 环境要求:开始编译前的准备
在动手前,确认你的开发机满足以下最低要求:
| 依赖 | 版本要求 | 说明 |
|---|---|---|
| Flutter SDK | 3.9.2+(Dart 3.9.2+) | 参考 pubspec.yaml 中sdk: ^3.9.2 |
| 目标设备 | iOS 模拟器 / Android 模拟器 / 真机 | macOS 开发环境可直接跑桌面端 |
| Xcode | 最新版 | 仅 iOS 目标需要,含 CocoaPods |
💡 建议直接安装 Flutter stable 最新版,避免版本过旧导致插件编译失败。
1️⃣ 克隆仓库:获取 Echo Loop 源码
在终端执行以下命令克隆项目(如果网络受限,可以配合代理加速):
git clone https://gitcode.com/echo-loop/Echo-Loop.git cd Echo-Loop仓库结构一览(核心目录):
lib/ ├── l10n/ # 国际化翻译文件(ARB 格式,见 l10n.yaml) ├── models/ # 数据模型(AudioItem, Sentence, Collection 等) ├── providers/ # Riverpod 状态管理(音频引擎层 + 听力业务层) ├── database/ # Drift 数据库(表定义 + DAO) ├── screens/ # 页面 ├── services/ # 服务层(存储、字幕解析、TTS、ASR 等) └── widgets/ # 可复用组件 test/ # 单元 / Widget 测试 integration_test/ # 端到端集成测试2️⃣ 配置编译期环境变量:最容易踩坑的一步
Echo Loop 的 Supabase、Google 登录、后端 API 等配置统一走编译期注入(--dart-define-from-file),仓库提供了模板文件 .dev.env.template,照着填即可:
cp .dev.env.template .dev.env打开.dev.env,按注释填写:
| 变量 | 是否必填 | 说明 |
|---|---|---|
SUPABASE_URL/SUPABASE_PUBLISHABLE_KEY | 建议填 | 账号认证依赖,留空则登录功能不可用 |
GOOGLE_WEB_CLIENT_ID | 可留空 | Google 登录的 Web Client ID |
API_BASE_URL | 默认已填 | dev 环境为https://dev.echo-loop.top |
REVENUECAT_API_KEY_* | 可留空 | 订阅相关,留空 App 仍可正常运行 |
⚠️ 注意:.dev.env已被.gitignore忽略,不要把真实密钥提交进仓库。发布构建使用.prod.env(同样的键,API_BASE_URL换成生产地址)。
3️⃣ 安装依赖并生成代码:pub get 与 build_runner
Echo Loop 大量使用代码生成(Drift 数据库、Riverpod Provider、JSON 序列化),标准流程是两步:
flutter pub get # 安装依赖 dart run build_runner build # 生成 .g.dart 代码(Drift / Riverpod)💡 仓库已提交生成产物,首次运行不强制跑 build_runner;但只要你修改了 Provider 或表定义,就必须重新执行
dart run build_runner build,否则会出现"方法未定义"的报错。
4️⃣ 快速启动:把 Echo Loop 跑起来
带上环境变量文件,一条命令启动到目标设备:
flutter run -d android --dart-define-from-file=.dev.env # Android 模拟器/真机 flutter run -d ios --dart-define-from-file=.dev.env # iOS 模拟器/真机 flutter run -d macos --dart-define-from-file=.dev.env # macOS 桌面端(开发中)启动后你会看到音频导入、学习闭环等核心界面,项目自带演示素材(assets/demo/下的音频与字幕),可以不开任何外部服务直接体验精听、跟读、复述流程。
iOS 模拟器快捷方式
macOS 用户可以用仓库内置脚本 scripts/run_simulator.sh,自动完成构建、安装、启动:
./scripts/run_simulator.sh --device "iPhone 15" --boot5️⃣ 测试与质量检查:像贡献者一样验证
改动代码后,按项目规范运行静态分析和测试(详见 AGENTS.md):
flutter analyze # 静态分析 flutter test # 全部单元 / Widget 测试 flutter test integration_test -d macos # 集成测试 dart format . # 格式化发版或大范围改动时,可运行 scripts/check.sh,它按顺序执行 analyze → 单测 → 集成测试 → macOS 构建的全链路检查。
📌 常见编译问题排查
| 现象 | 原因与解决 |
|---|---|
SUPABASE_URL 未定义等编译错误 | 忘了加--dart-define-from-file=.dev.env参数 |
.g.dart文件报"找不到方法" | 修改过模型/Provider 后未运行dart run build_runner build |
| iOS 构建卡住或失败 | 先cd ios && pod install更新 CocoaPods 依赖 |
| Android 真机 release 包卡在启动页 | 检查android/app/proguard-rules.pro中 ffmpeg_kit 的 keep 规则是否被误删 |
🗺️ 下一步:读懂核心代码
跑通之后,推荐按这条路径阅读源码:
- 入口与启动流程:lib/main.dart(含启动埋点、Supabase 初始化、Provider 注册)
- Riverpod 状态管理:lib/providers/(音频引擎层
audio_engine/与听力业务层listening_practice/) - Drift 数据库:lib/database/app_database.dart(14+ 张表:学习进度、收藏、记忆调度等,DAO 位于 lib/database/daos/)
- 功能模块:lib/features/(订阅、记忆调度、播客、AI 聊天等按 feature 组织)
- 开发规范:CLAUDE.md 与 AGENTS.md 记录了项目的分层职责与测试要求,改代码前值得一读
完成一次"克隆 → 配置 → 生成 → 运行"的完整循环,你就掌握了这个 Flutter + Riverpod + Drift 项目的开发姿势,可以开始为 Echo Loop 贡献代码了 🚀
【免费下载链接】Echo-LoopEcho Loop 是一款科学、高效的 AI 英语听说训练 App,通过精听、跟读、盲听、复述和间隔复习,自动驱动学习者把每一段音频真正练懂、练熟、练到会说。项目地址: https://gitcode.com/echo-loop/Echo-Loop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考