Files
ShowenV2/clients/flutter/TASKS.md
showen bff9ec535d feat: Flutter 客户端 App + Web UI APK 下载入口
- 新增 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>
2026-03-14 02:09:52 +08:00

165 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 事件字段与文档不一致,优先修正客户端解析兼容层,不阻塞主流程。