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. 分层结构
建议分为五层:
- 表现层
- 交互状态层
- 应用服务层
- 平台能力层
- 本地算法桥接层
5. 表现层
职责:
第一版建议页面:
- 首页
- 录音页
- 样本详情页
- 实验过程页
- 结果结论页
- 历史记录页
- 设置页
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. 数据流
建议第一版数据流如下:
- 用户录音或导入音频
- Flutter 生成
Observation
- 本地 Rust 探针引擎生成初始
Evidence
- Flutter 将样本摘要和 evidence 发给远端
- 远端 AI 编排并返回实验计划
- 远端或本地执行实验
- 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 服务分别承担基础探针与高级编排能力。