SuperAPI AI 工具集

flutter-project-structure

编程与开发

查看项目

更新于 10-15 20:05

技能介绍

用途:为 Flutter 单包项目提供一套分层目录规范,帮助判断新功能、新页面、Repository、UseCase 应放在哪里,以及代码该留在 feature 内还是提升到 core。

主要能力:以 Clean Architecture 依赖方向组织代码,presentation → domain ← data,domain 为不依赖任何框架的纯 Dart 层。feature 放在 presentation 下,以文件夹区分;跨 feature 共享的代码提升到 core 或 domain,禁止 feature 之间直接引用。目录涵盖 core(di、routing、domain/error、presentation 组件与对话框)、data(data_source、repository)、domain(model、repository、use_case、error、filter)、presentation/<feature> 与 ui 设计令牌。每个 feature 由两个文件组成:view_model 文件顶部放 freezed 的 State 与 sealed Action,底部放继承 ChangeNotifier 的 ViewModel;screen 文件顶部为 Root(通过 get_it 注入 VM,用 ListenableBuilder 监听),底部为纯 UI 的 Screen,仅接收 state 与 onAction。

使用方式:新增 feature 时按顺序创建 domain 模型、Repository 接口、功能级 Error、UseCase(单一 execute())、DataSource 与 Repository 实现、ViewModel、Root/Screen,并在 core/di/di_setup.dart 注册、在 route_paths.dart 与 router.dart 添加路由。仅当第二个 feature 实际使用时才把代码移到 core。代码生成文件通过 dart run build_runner build --delete-conflicting-outputs 生成。

依赖限制:domain 不得 import data、presentation 或 package:flutter,只能依赖其他 domain 与 core/domain 的纯 Dart 代码,以保证可测试性与复用性。

适用场景:采用单包结构的 Flutter 项目,尤其是 Android/KMP 项目中不使用 Gradle 多模块而选择在 lib/ 下按层分离的场景。

涉及库:get_it、go_router、freezed、json_serializable、rxdart、flutter_test。其他平台的收费、版本与兼容性信息暂未提供。