Flutter 架构设计:Feature-First 与 Pub workspaces

Flutter 项目,我更推荐 Feature-First

Layer-First 优先按技术层组织代码。Feature-First 以功能为顶层组织单位,将同一功能相关的实现和测试聚合到同一个模块。

我更推荐 Feature-First:让功能有明确的归属和对外入口,再由主应用按需组合。

用 package 封装功能,主应用负责组合

以 auth package 和宿主应用 mobile_app 为例:

text 复制代码
project/
├── apps/mobile_app/      # 宿主应用
├── packages/auth/       # 功能 package
│   ├── lib/
│   │   ├── auth.dart     # 对外入口
│   │   └── src/          # 内部实现
│   ├── test/
│   └── pubspec.yaml
└── pubspec.yaml

auth 通过 auth.dart 暴露供外部使用的能力;mobile_app 声明依赖、接入页面并配置导航。功能的内部实现留在所属 package 中。

需要平台相关能力时,功能包可以依赖 plugin。plugin 是包含 Dart 接口和平台实现的一类 package。

用 Pub workspaces 管理这些包

Pub workspaces 让同一仓库中的多个包统一解析依赖、共享根锁文件,各包仍保留自己的依赖声明。

先在根目录的 pubspec.yaml 中登记成员:

yaml 复制代码
name: app_workspace
publish_to: none

environment:
  sdk: ^3.6.0

workspace:
  - apps/mobile_app
  - packages/auth

再让成员启用 resolution: workspace,并声明实际使用的依赖。例如 mobile_app 引用 auth:

yaml 复制代码
# apps/mobile_app/pubspec.yaml
name: mobile_app
resolution: workspace

environment:
  sdk: ^3.6.0

dependencies:
  flutter:
    sdk: flutter
  auth:
    path: ../../packages/auth

auth 包也需要启用 resolution: workspace。根包和成员包的 SDK 约束下限至少为 Dart 3.6.0,已有更高下限时保持原值;path 是这里采用的本地引用方式。

最后在根目录运行 flutter pub get。应用通过 package:auth/auth.dart 使用模块,再接入自己的页面和导航。工作区管理包,依赖声明连接包,主应用组合功能。

相关推荐
gnip1 小时前
GetX 在 Flutter 中的使用:两种视图管理方式解析
前端·flutter
程序员老刘1 小时前
Flutter版本选择指南:9月大限落地,3.47一个月连发四补丁 | 2026年9月
flutter·ai编程·客户端
zeqinjie1 小时前
Flutter 获取 iPhone Duo 预留区位置
前端·flutter·ios
恋猫de小郭2 小时前
Flutter Golden Tests:给 AI Agent 的 UI 测试系统
android·前端·flutter
CHB2 小时前
一文讲透原生渲染和自渲染
flutter·react native·uni-app
君赏6 天前
棉宇宙 Flutter 热更新是如何落地的
flutter
恋猫de小郭6 天前
AndroidX 新增 Security State ,支持可编程的系统安全状态查询
android·前端·flutter
zihan5186 天前
自己做软件日记9/21 得到了一个良好的文件结构框架
后端·flutter·前端框架·android studio
ZFJ_张福杰7 天前
【Flutter】Flutter 中有哪些耗时操作?从 UI 卡顿到 Isolate 性能优化
flutter·性能优化·卡顿·isolate