用途:该技能定义如何用分层架构、合理的数据流和 MVVM 模式组织 Flutter 应用,以提升可维护性与可测试性。适用于搭建新项目、将代码重构为分层结构、创建或重构 ViewModel/Repository/Service、配置依赖注入、实现跨层单向数据流,以及为复杂业务逻辑或共享用例添加 Domain(逻辑)层。
主要能力与结构:应用分为 UI 层(View + ViewModel)与 Data 层(Repository + Service),仅复杂应用才增加 Logic(Domain)层(Use Cases/Interactors)。规则包括:只有相邻层可通信,UI 层不得直接访问 Service;数据变更只发生在 Data 层,Repository 是唯一数据源(SSOT);状态向下流动(Data→UI),事件向上流动(UI→Data)。
组件职责:View 只描述如何呈现数据,保持最少逻辑,将用户交互事件传给 ViewModel;ViewModel 把应用数据转换为 UI 状态并维护当前状态,向 View 暴露回调(命令),从 Repository 获取和转换数据;Repository 是唯一可变更数据的类,负责缓存、错误处理、刷新,并把 Service 的原始数据转换为领域模型;Service 封装 API 端点,返回异步响应对象,隔离数据加载且不持有状态。
使用方式:依赖通过构造函数注入,并定义抽象接口以便测试时替换实现。搭建新功能的流程为:创建 Service(带类型化响应解析)→ 创建 Repository(注入 Service,实现缓存与错误处理)→ 创建 ViewModel(注入 Repository,暴露 UI 状态与命令)→ 创建 View(绑定 ViewModel、渲染状态、派发事件)→ 接线依赖注入容器 → 验证 View 不直接访问 Service 且数据单向流动。仅当逻辑复杂、不适合放在 UI 或 Data 层,或被多个 ViewModel 复用、需合并多个 Repository 数据时,才引入 Use Case。
数据存储与约定:配置和偏好使用键值存储(如 shared_preferences),复杂关系数据使用 SQL 存储(如 drift、sqflite);可实现乐观更新以提升响应感,并在 Repository 中组合本地与远程数据源以支持离线优先。编码上尽量使用 StatelessWidget,保持 build 方法简单,字段和顶层变量优先 final,类支持时优先 const 构造,公共 API 使用显式类型,常量命名具描述性。
限制:资料未提供具体安装命令、版本要求、收费或平台信息,暂未提供。