Files
ShowenV2/clients/flutter/TODO.md
showen d30c111c71 feat: M1.1 完成 + M1.2 启动 — 全量更新
M1.1 收尾:
- 24项 P0/P1/P2 bug 修复 (Rust 107 tests + Flutter 15 tests)
- Flutter App v0.3: cupertino_icons 修复, 单元测试, 调试面板, APK 52.6MB
- 示例插件完善: manifest.json + 请求/响应示范 + 7个测试
- API 文档重写 (以 routes.rs 为唯一权威)
- MILESTONES.md 更新至 100%

M1.2 启动:
- P0: 插件管理 API 闭环 (handle_manager_message Custom 分支 + broadcast_plugin_states)
- ServiceManager 集成测试 8/8 (tests/m1_2_service_manager.rs)
- M1.2 测试计划 (docs/M1.2_TEST_PLAN.md, 18个E2E场景)
- 动态插件系统: auto_rollback + version_manager GC + 路径穿越防护

总计: Rust 115/115 测试, Flutter 15/15 测试, 零 warning

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 18:12:42 +08:00

2.5 KiB
Raw Blame History

Flutter App 待优化清单

生成时间: 2026-03-14 最后更新: 2026-03-14 当前完成度: ~95%, APK 待重编译

P0 — 阻塞上线

1. 设备 IP 持久化 + 多设备支持

  • main.dart:20 hardcoded 127.0.0.1:8080,重启丢失 已从持久化初始化
  • 需要: SharedPreferences 存储设备历史 (最近10台) device_storage_service.dart
  • 需要: 顶栏设备切换下拉菜单 赵雨薇处理中
  • 需要: 连接前验证 /api/status 可达性 赵雨薇处理中

2. WebSocket 重连增强 已完成

  • web_socket_service.dart 固定 2 秒重连,无退避 指数退避 2s→max 60s
  • 需要: 顶层连接状态横幅 connection_status_banner.dart
  • 需要: 手动重试按钮 manualReconnect()

3. HTTP baseUrl 动态化 已完成

  • HttpApiService/WebSocketService 的 URL 需跟随设备切换动态更新
  • DeviceProvider 应成为全局设备上下文

P1 — 应该有

4. 视频管理 UI (Settings 页) 已完成

  • 视频列表 + 删除确认弹窗 settings_screen.dart:266-354
  • 刷新按钮 settings_screen.dart:282

5. 配置 JSON 编辑器 已完成

  • 需要: 复制到剪贴板 settings_screen.dart:559
  • 需要: 切换按钮 (表单/JSON) 赵雨薇完成

6. BLE 简易控制命令 已完成

  • play/pause/next/prev BLE 按钮 network_screen.dart:115-183

7. 全页面下拉刷新 已完成

  • 所有 5 个页面 RefreshIndicator 全覆盖

P2 — 锦上添花

8. 视频上传 UI 受限

  • file_picker 包在 ARM64 设备上无法下载(网络超时)
  • 上传按钮已保留,当前显示"即将推出"提示
  • 可通过 Web UI 上传视频

9. 单元测试 & Widget 测试 已完成

  • 目前零测试覆盖 15 个测试全部通过
  • 优先: models 解析、HttpApiService 错误处理、核心页面交互 test/models/models_test.dart + test/services/http_api_service_test.dart

10. 调试日志面板 已完成

  • 本地事件日志查看器 debug_screen.dart + debug_provider.dart
  • BLE/WebSocket/HTTP 事件时间线 筛选 Chips + 颜色区分标签 + 500 条上限

已知技术债

  • WebSocket 事件解析假设固定结构,缺 schema 校验
  • API 响应全用 Map<String, dynamic>,缺类型安全
  • 无依赖注入框架
  • 无错误边界 Widget (ErrorWidget.builder)
  • Gradle/Kotlin/AGP 版本偏旧 (有 warning可用 --android-skip-build-dependency-validation 绕过)