- 通过 qemu-user-static 实现 ARM64 主机编译 Android APK (51MB) - 修复 Gradle: Aliyun 镜像 + PREFER_SETTINGS + JVM 内存 1536M - 部署 APK 到 configs/downloads/, Web 下载接口已验证 (HTTP 200) - 新增 Flutter TODO.md: 10项待优化 (P0/P1/P2 分级) - 新增 pm_soul.md, 更新 routes.rs APK 下载路由 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
65 lines
2.0 KiB
Markdown
65 lines
2.0 KiB
Markdown
# Flutter App 待优化清单
|
||
|
||
> 生成时间: 2026-03-14
|
||
> 当前完成度: ~68%, APK 已编译 (51MB)
|
||
|
||
## P0 — 阻塞上线
|
||
|
||
### 1. 设备 IP 持久化 + 多设备支持
|
||
- `main.dart:20` hardcoded `127.0.0.1:8080`,重启丢失
|
||
- 需要: SharedPreferences 存储设备历史 (最近10台)
|
||
- 需要: 顶栏设备切换下拉菜单
|
||
- 需要: 连接前验证 `/api/status` 可达性
|
||
|
||
### 2. WebSocket 重连增强
|
||
- `web_socket_service.dart` 固定 2 秒重连,无退避
|
||
- 需要: 指数退避 (2s→4s→8s→16s→max 60s)
|
||
- 需要: 顶层连接状态横幅 (Reconnecting... / Offline)
|
||
- 需要: 手动重试按钮
|
||
|
||
### 3. HTTP baseUrl 动态化
|
||
- HttpApiService/WebSocketService 的 URL 需跟随设备切换动态更新
|
||
- DeviceProvider 应成为全局设备上下文,驱动所有服务重连
|
||
|
||
## P1 — 应该有
|
||
|
||
### 4. 视频管理 UI (Settings 页)
|
||
- API 已有 getVideos(),但 UI 无视频列表展示
|
||
- 需要: 视频列表 + 删除确认弹窗
|
||
- 需要: 刷新按钮
|
||
|
||
### 5. 配置 JSON 编辑器
|
||
- 当前只有表单模式,缺 raw JSON 编辑模式
|
||
- 需要: 切换按钮 (表单/JSON)
|
||
- 需要: 复制到剪贴板
|
||
|
||
### 6. BLE 简易控制命令
|
||
- PRD §8.6 要求: 近场调试用 play/pause/next/prev BLE 按钮
|
||
- Network 页添加 BLE 控制区域
|
||
|
||
### 7. 全页面下拉刷新
|
||
- 目前只有 Home 页有 RefreshIndicator
|
||
- Playback / Trigger / Network / Settings 都需要
|
||
|
||
## P2 — 锦上添花
|
||
|
||
### 8. 视频上传 UI
|
||
- 需要 file_picker 依赖
|
||
- 进度条 + multipart upload
|
||
|
||
### 9. 单元测试 & Widget 测试
|
||
- 目前零测试覆盖
|
||
- 优先: models 解析、HttpApiService 错误处理、核心页面交互
|
||
|
||
### 10. 调试日志面板
|
||
- 本地事件日志查看器
|
||
- BLE/WebSocket/HTTP 事件时间线
|
||
|
||
## 已知技术债
|
||
|
||
- WebSocket 事件解析假设固定结构,缺 schema 校验
|
||
- API 响应全用 `Map<String, dynamic>`,缺类型安全
|
||
- 无依赖注入框架
|
||
- 无错误边界 Widget (ErrorWidget.builder)
|
||
- Gradle/Kotlin/AGP 版本偏旧 (有 warning,可用 `--android-skip-build-dependency-validation` 绕过)
|