- 新增 Flutter 跨平台客户端项目 (clients/flutter/)
- 29 个 Dart 文件: 服务层/状态管理/5个页面/BLE配网
- BLE 蓝牙配网: 扫描设备、写入WiFi凭据、配网状态监听
- HTTP API 客户端: 覆盖全部端点 (播放/场景/WiFi/视频/配置/文件/插件)
- WebSocket 实时通信: 事件流 + 自动重连
- 暗色主题 Material 3 UI, 中文界面
- Android 配置: minSdkVersion 21, BLE/网络权限
- PRD 产品需求文档 + 开发任务看板
- Web UI 添加 APK 下载入口 (routes.rs)
- 下载弹窗 + 二维码 + /download/{filename} 静态文件路由
- BLE 插件增加自动重连循环 (ble/mod.rs)
- BLE 默认设备名修正为 'Showen' (config.rs)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
165 lines
7.6 KiB
Markdown
165 lines
7.6 KiB
Markdown
# Showen Flutter App 开发任务看板
|
||
|
||
## 说明
|
||
|
||
- 估时单位:人时(h)/ 人日(d)
|
||
- 优先级:P0 = MVP 必须完成,P1 = 首发建议完成,P2 = 可后续迭代
|
||
- 状态:当前统一标记为 `待开始`
|
||
|
||
## 总体节奏
|
||
|
||
| 阶段 | 目标 | 预计工时 |
|
||
|------|------|----------|
|
||
| Sprint 1 | 脚手架、架构、设备发现、基础网络层 | 4-5d |
|
||
| Sprint 2 | BLE 配网、HTTP 控制、首页/播放控制页 | 5-6d |
|
||
| Sprint 3 | 状态机页、网络设置页、WebSocket 实时状态 | 4-5d |
|
||
| Sprint 4 | 设置页、视频/配置管理、测试与发布准备 | 4-5d |
|
||
|
||
预计总工时:17-21 人日
|
||
|
||
## 模块一:项目基础架构
|
||
|
||
| ID | 任务 | 优先级 | 预计工时 | 依赖 | 状态 |
|
||
|----|------|--------|----------|------|------|
|
||
| A1 | 创建 Flutter 工程基础目录、环境区分、包管理方案 | P0 | 4h | 无 | 待开始 |
|
||
| A2 | 搭建路由、主题、全局错误处理、全局 Toast 能力 | P0 | 6h | A1 | 待开始 |
|
||
| A3 | 建立分层架构(presentation/application/domain/data) | P0 | 6h | A1 | 待开始 |
|
||
| A4 | 建立统一 API Client、错误模型、超时/重试策略 | P0 | 6h | A3 | 待开始 |
|
||
| A5 | 建立本地存储方案(设备历史、设置项) | P0 | 4h | A3 | 待开始 |
|
||
| A6 | 建立日志与调试开关 | P1 | 3h | A3 | 待开始 |
|
||
|
||
模块小计:29h
|
||
|
||
## 模块二:设备发现与连接管理
|
||
|
||
| ID | 任务 | 优先级 | 预计工时 | 依赖 | 状态 |
|
||
|----|------|--------|----------|------|------|
|
||
| D1 | 设计设备实体与连接状态模型 | P0 | 3h | A3 | 待开始 |
|
||
| D2 | 实现手动输入 IP 连接与可达性校验 | P0 | 4h | A4 | 待开始 |
|
||
| D3 | 实现最近设备列表的本地存储、切换、删除 | P0 | 5h | A5,D1 | 待开始 |
|
||
| D4 | 实现全局当前设备上下文与切换机制 | P0 | 5h | D1,D3 | 待开始 |
|
||
| D5 | 设备连接失败、离线、超时提示与兜底页 | P1 | 4h | D2,D4 | 待开始 |
|
||
|
||
模块小计:21h
|
||
|
||
## 模块三:BLE 蓝牙配网
|
||
|
||
| ID | 任务 | 优先级 | 预计工时 | 依赖 | 状态 |
|
||
|----|------|--------|----------|------|------|
|
||
| B1 | 选型并接入 Flutter BLE 插件,完成 iOS/Android 权限配置 | P0 | 6h | A1 | 待开始 |
|
||
| B2 | 实现扫描 `Showen` 设备列表与连接流程 | P0 | 8h | B1 | 待开始 |
|
||
| B3 | 实现 GATT Service/Characteristic 封装 | P0 | 6h | B1 | 待开始 |
|
||
| B4 | 实现 SSID/Password/Command 写入与配网命令发送 | P0 | 6h | B3 | 待开始 |
|
||
| B5 | 实现 Status 特征 read/notify 双模式监听与 JSON 解析 | P0 | 8h | B3 | 待开始 |
|
||
| B6 | 实现 BLE 配网页 UI、失败重试、权限引导 | P0 | 8h | B2,B4,B5 | 待开始 |
|
||
| B7 | 实现 BLE 简单控制命令(play/pause/next/prev) | P1 | 4h | B3 | 待开始 |
|
||
| B8 | BLE 异常专项测试(权限、断连、超时、重复配网) | P1 | 6h | B6 | 待开始 |
|
||
|
||
模块小计:52h
|
||
|
||
## 模块四:HTTP API 控制层
|
||
|
||
| ID | 任务 | 优先级 | 预计工时 | 依赖 | 状态 |
|
||
|----|------|--------|----------|------|------|
|
||
| H1 | 封装播放控制接口(play/pause/next/previous/goto) | P0 | 4h | A4 | 待开始 |
|
||
| H2 | 封装状态机接口(trigger/scene) | P0 | 4h | A4 | 待开始 |
|
||
| H3 | 封装 WiFi 接口(status/scan/connect/ap start/stop) | P0 | 5h | A4 | 待开始 |
|
||
| H4 | 封装配置接口(get config/post config) | P0 | 4h | A4 | 待开始 |
|
||
| H5 | 封装视频接口(list/upload/delete) | P1 | 6h | A4 | 待开始 |
|
||
| H6 | 封装 BLE 状态接口(get ble status) | P1 | 2h | A4 | 待开始 |
|
||
| H7 | 建立统一响应校验、错误码映射与空响应处理 | P0 | 4h | H1,H2,H3,H4 | 待开始 |
|
||
|
||
模块小计:29h
|
||
|
||
## 模块五:WebSocket 实时状态
|
||
|
||
| ID | 任务 | 优先级 | 预计工时 | 依赖 | 状态 |
|
||
|----|------|--------|----------|------|------|
|
||
| W1 | 建立 WebSocket 连接管理器与事件分发器 | P0 | 6h | A3 | 待开始 |
|
||
| W2 | 解析 `status_update` / `state_update` / `wifi_update` 事件 | P0 | 5h | W1 | 待开始 |
|
||
| W3 | 实现自动重连、退避、前后台切换恢复 | P0 | 6h | W1 | 待开始 |
|
||
| W4 | 将实时状态同步到首页、播放页、状态机页、网络页 | P0 | 5h | W2 | 待开始 |
|
||
| W5 | 实现连接状态提示条与调试日志面板 | P1 | 4h | W3 | 待开始 |
|
||
|
||
模块小计:26h
|
||
|
||
## 模块六:页面开发
|
||
|
||
| ID | 任务 | 优先级 | 预计工时 | 依赖 | 状态 |
|
||
|----|------|--------|----------|------|------|
|
||
| UI1 | 实现首页:设备状态、快捷控制、当前播放信息 | P0 | 8h | D4,H1,W4 | 待开始 |
|
||
| UI2 | 实现播放控制页:大按钮、播放列表、goto 操作 | P0 | 8h | H1,W4 | 待开始 |
|
||
| UI3 | 实现状态机页:当前状态、trigger、scene | P0 | 8h | H2,W4 | 待开始 |
|
||
| UI4 | 实现网络设置页:BLE 配网、WiFi 管理、BLE 控制 | P0 | 10h | B6,H3,H6,W4 | 待开始 |
|
||
| UI5 | 实现设置页:配置管理、视频管理、关于 | P0 | 10h | H4,H5 | 待开始 |
|
||
| UI6 | 实现底部导航、设备切换入口、通用空态/异常态 | P0 | 6h | A2,D4 | 待开始 |
|
||
|
||
模块小计:50h
|
||
|
||
## 模块七:配置与视频管理增强
|
||
|
||
| ID | 任务 | 优先级 | 预计工时 | 依赖 | 状态 |
|
||
|----|------|--------|----------|------|------|
|
||
| C1 | 配置查看器:JSON 格式化、复制、刷新 | P1 | 4h | H4 | 待开始 |
|
||
| C2 | 配置编辑器:表单/文本双模式评估并实现 MVP | P1 | 8h | C1 | 待开始 |
|
||
| C3 | 视频列表管理:删除确认、刷新状态回显 | P1 | 4h | H5 | 待开始 |
|
||
| C4 | 视频上传(选文件、进度、失败处理) | P2 | 8h | H5 | 待开始 |
|
||
|
||
模块小计:24h
|
||
|
||
## 模块八:质量保障与发布准备
|
||
|
||
| ID | 任务 | 优先级 | 预计工时 | 依赖 | 状态 |
|
||
|----|------|--------|----------|------|------|
|
||
| Q1 | 编写核心单元测试(模型、解析、状态管理) | P0 | 8h | A3,H1,H2,H3,W2 | 待开始 |
|
||
| Q2 | 编写 Widget 测试(首页、播放页、网络页关键交互) | P1 | 8h | UI1,UI2,UI4 | 待开始 |
|
||
| Q3 | 真机联调清单(Android/iOS、BLE、HTTP、WebSocket) | P0 | 6h | B6,UI1,UI2,UI3,UI4,UI5 | 待开始 |
|
||
| Q4 | 发布前缺陷收敛、性能优化、崩溃排查 | P0 | 8h | Q1,Q2,Q3 | 待开始 |
|
||
| Q5 | 产出接入说明、测试报告、已知问题列表 | P1 | 4h | Q3,Q4 | 待开始 |
|
||
|
||
模块小计:34h
|
||
|
||
## 并行建议
|
||
|
||
### 可并行推进
|
||
|
||
1. 基础架构(A1-A5)完成后,可并行推进 D 模块、B1-B3、H 模块、W1。
|
||
2. HTTP 封装和 WebSocket 管理器完成后,UI1-UI5 可拆给不同开发者并行开发。
|
||
3. BLE 配网页(B6)与网络设置页(UI4)可先做骨架,再在 BLE 联调完成后收口。
|
||
|
||
### 串行关键链路
|
||
|
||
1. `A1 -> A3 -> A4` 是全局基础链路,必须优先完成。
|
||
2. `B1 -> B3 -> B4/B5 -> B6` 是 BLE 配网主链路,不能跳步。
|
||
3. `W1 -> W2 -> W4` 是实时状态闭环核心链路。
|
||
|
||
## 关键里程碑验收
|
||
|
||
### 里程碑 M1:基础可运行
|
||
|
||
- 工程可运行
|
||
- 手动输入 IP 可连接设备
|
||
- 基础 HTTP 请求可成功
|
||
|
||
### 里程碑 M2:首次接入闭环
|
||
|
||
- BLE 扫描、连接、配网可用
|
||
- 网络设置页完成基本闭环
|
||
|
||
### 里程碑 M3:控制闭环
|
||
|
||
- 首页、播放页、状态机页可完成核心控制
|
||
- WebSocket 状态实时更新可用
|
||
|
||
### 里程碑 M4:首发就绪
|
||
|
||
- 设置页、视频/配置管理完成
|
||
- 真机联调完成
|
||
- 已知问题可控并形成发布清单
|
||
|
||
## 风险备注
|
||
|
||
- BLE 插件在 iOS/Android 权限与后台行为差异大,需预留专项联调时间。
|
||
- `/api/videos/upload`、配置热重载等能力依赖服务端联调结果,建议先保证查看/删除/提交基础能力。
|
||
- 若服务端 WebSocket 事件字段与文档不一致,优先修正客户端解析兼容层,不阻塞主流程。
|