Flutter终端架构设计.md 4.1 KB

Flutter终端架构设计

版本号:v0.1.0 最后更新:2026-04-04

1. 目的

本文档用于定义本项目移动终端的第一版架构,明确 Flutter 在系统中的职责、分层方式和与本地算法核心、远端服务之间的边界。

2. 终端定位

本项目中的 Flutter 终端不是单纯展示层,而是“移动实验室终端”。

它需要承担:

  • 采集音频
  • 展示观测结果
  • 展示实验树
  • 展示证据和结论
  • 发起分析流程
  • 管理本地会话和样本历史

但它不应承担:

  • 重型 DSP 主计算
  • 重型声源分离
  • Gemma 4 主编排推理

3. 技术栈建议

第一版建议:

  • 框架:Flutter
  • 语言:Dart
  • 状态管理:Riverpod
  • 路由:go_router
  • 本地数据库:SQLite
  • 网络通信:HTTP + WebSocket
  • 本地算法核心:Rust
  • Flutter 与 Rust 集成:FFI

4. 分层结构

建议分为五层:

  1. 表现层
  2. 交互状态层
  3. 应用服务层
  4. 平台能力层
  5. 本地算法桥接层

5. 表现层

职责:

  • 页面 UI
  • 图形化结果展示
  • 操作入口

第一版建议页面:

  • 首页
  • 录音页
  • 样本详情页
  • 实验过程页
  • 结果结论页
  • 历史记录页
  • 设置页

6. 交互状态层

职责:

  • 管理页面状态
  • 管理分析任务状态
  • 管理实验树展示状态

建议以 feature 为单位组织 provider,而不是按技术层随意分散。

7. 应用服务层

职责:

  • 协调录音、上传、分析启动、结果轮询、历史查询
  • 封装对本地数据库和远端服务的访问

建议拆分为:

  • ObservationService
  • AnalysisSessionService
  • ExperimentService
  • ConclusionService
  • SettingsService

8. 平台能力层

职责:

  • 麦克风录音
  • 文件导入
  • 权限管理
  • 后台任务
  • 网络可用性检测

这一层可使用插件,也可在需要时补自定义平台通道。

9. 本地算法桥接层

职责:

  • 调用 Rust 本地探针算法
  • 管理输入输出序列化
  • 将结果映射回 Dart 侧模型

建议第一版仅在本地桥接层承载:

  • normalize
  • resample
  • energy probe
  • spectral probe
  • onset probe
  • periodicity probe

10. 本地与远端边界

10.1 本地优先处理

建议本地先做:

  • 录音预处理
  • 通用探针链
  • 初始 evidence 生成

10.2 远端处理

建议远端负责:

  • Gemma 4 编排
  • 重型验证链
  • 多轮实验管理
  • 最终结论整合

11. 数据流

建议第一版数据流如下:

  1. 用户录音或导入音频
  2. Flutter 生成 Observation
  3. 本地 Rust 探针引擎生成初始 Evidence
  4. Flutter 将样本摘要和 evidence 发给远端
  5. 远端 AI 编排并返回实验计划
  6. 远端或本地执行实验
  7. Flutter 展示实验过程、证据和结果

12. 页面重点

12.1 首页

重点展示:

  • 开始分析
  • 最近样本
  • 当前分析任务

12.2 样本详情页

重点展示:

  • 波形摘要
  • 录音信息
  • 初始 probe evidence

12.3 实验过程页

重点展示:

  • 当前假设
  • 已执行实验
  • 分数变化
  • 失败原因

12.4 结果页

重点展示:

  • 结论摘要
  • 支持证据
  • 冲突证据
  • 不确定性
  • 下一步建议

13. 终端状态模型建议

建议明确区分下列状态:

  • idle
  • recording
  • probing
  • planning
  • executing
  • reviewing
  • completed
  • failed

终端不应把整个分析过程只表示成一个模糊的 loading 状态。

14. 第一版目录建议

lib/
  app/
  features/
    capture/
    observation/
    analysis/
    experiment/
    conclusion/
    history/
    settings/
  services/
  data/
  ffi/
  routing/

15. 第一版实现重点

第一版应优先保证:

  • 录音稳定
  • 本地探针可跑
  • 远端编排闭环打通
  • 实验过程可视化
  • 结论结构清晰

第一版不应优先追求:

  • 复杂视觉设计
  • 离线全功能
  • 大量插件化能力
  • 多平台差异细节优化

16. 结论

Flutter 在本项目中的正确角色是移动实验室终端。

它负责:

  • 采集
  • 展示
  • 会话管理
  • 分析流程可视化

而本地 Rust 和远端 AI 服务分别承担基础探针与高级编排能力。