Flutter 开发规范包括 Dart 编码规范、项目结构规范、命名规范和代码风格等内容,确保团队协作时代码的一致性和可读性。以下是 Flutter/Dart 开发中的一些主要规范:
1. Dart 语言规范
1.1 命名规范
• 类名和枚举名:使用 PascalCase(首字母大写的驼峰格式),如 HomePage, UserModel。
• 变量名、方法名、参数名:使用 camelCase(首字母小写的驼峰格式),如 userName, fetchData()。
• 常量:使用全部大写加下划线,如 MAX_COUNT。
• 文件名:使用小写字母和下划线,如 home_page.dart, user_model.dart。
1.2 注释规范
• 单行注释:使用 // 注释单行。
• 文档注释:使用 ///,注释类、方法和属性,文档注释应描述其功能和参数。
/// This method fetches data from the server.
Future<void> fetchData() async {
// implementation
}
• 多行注释:使用 /* ... */ 注释多行。
1.3 代码风格
• 使用 final 和 const:能用 final 或 const 定义的变量不要用 var。
• 避免使用 var:若变量类型明确,直接使用具体类型定义。
• 简洁代码:方法和类保持简洁,方法长度不宜过长,可分拆为多个小方法。
• 空安全:优先使用空安全类型定义,避免出现空指针异常。
1.4 空安全操作
• ? (空安全访问) :在可能为 null 的对象后使用 ? 操作符。
• ?? (空合并操作符) :用于设置默认值,如 value ?? 'default'。
• ??=:用于仅在变量为 null 时赋值,如 name ??= 'Guest'。
2. 项目结构规范
2.1 项目目录结构
常见 Flutter 项目结构如下:
lib/
├── main.dart # 入口文件
├── app/ # 应用程序核心文件
│ ├── routes.dart # 路由文件
│ ├── bindings.dart # 依赖绑定
├── ui/ # UI 层
│ ├── screens/ # 页面
│ └── widgets/ # 公共组件
├── models/ # 数据模型
├── controllers/ # 控制器
├── services/ # 服务类
├── utils/ # 工具类
└── themes/ # 主题相关文件
2.2 页面文件结构****
每个页面组件的目录建议包括 view, controller, binding,便于管理页面逻辑和视图。例如,home 页面结构如下:
lib/ui/screens/home/
├── home_view.dart # 视图
├── home_controller.dart # 控制器
└── home_binding.dart # 绑定
2.3 组件化开发
• 通用组件:将可复用的 UI 组件放在 widgets 目录下,便于在不同页面中调用。 • 模块化开发:按模块划分业务逻辑,每个模块包含自己的视图、控制器、模型和服务。
3. 代码规范
3.1 状态管理规范
• 选择状态管理工具:尽量统一使用一种状态管理工具,如 Provider, GetX, Riverpod 等。
• 使用 Get.put() 和 Get.find()(如果使用 GetX),避免在页面中直接创建控制器实例。
3.2 异步编程
• 使用 async / await:尽量使用 async/await 处理异步代码,避免回调地狱。
• 捕获异常:对异步方法使用 try-catch 进行异常捕获,保证应用稳定性。
3.3 函数和方法
• 短小精悍:方法最好不要超过 20 行,保持代码简洁清晰。
• 参数个数:方法参数不宜过多,若参数较多,考虑封装为对象。
3.4 数据模型
• 使用 model 目录:将所有的数据模型类放在 models 目录下,便于管理。
• 序列化:使用 fromJson 和 toJson 方法进行数据转换,配合 json_serializable 等插件生成数据模型。
3.5 样式和主题
• 主题管理:将应用的主题放在 themes 目录下,方便管理。
• 使用常量:如颜色、字体大小等可以在 constants 文件中定义为常量,避免在代码中出现硬编码的数值。
4. 命名约定
• UI组件命名:命名尽量体现用途,如 LoginButton, ProfileAvatar。
• 控制器命名:以 Controller 结尾,如 LoginController, HomeController。
• 模型命名:数据模型类以 Model 结尾,如 UserModel, ProductModel。
5. 注释和文档
• 注释规范:保持简洁明了,方法、类和关键逻辑处都要有注释。
• 文档注释:公共方法、类和 API 应包含文档注释,解释其用途和用法。
6. Lint 规则和代码检查
建议在项目中使用 flutter_lints 插件,并根据团队需求自定义 analysis_options.yaml:
# 在 pubspec.yaml 中添加依赖
dev_dependencies:
flutter_lints: ^2.0.0
# 创建 analysis_options.yaml 配置代码检查规则
include: package:flutter_lints/flutter.yaml
linter:
rules:
always_specify_types: true # 强制指定类型
avoid_print: true # 避免使用 print
prefer_const_constructors: true # 优先使用 const 构造函数
7. Git 提交规范
• 单一功能提交:每次提交应尽量只包含一个功能或一个 Bug 修复。
• 提交信息:建议使用清晰的提交信息,如 feat: 增加用户登录功能,或 fix: 修复登录崩溃问题。
• 分支命名:采用简洁的分支命名方式,如 feature/login, bugfix/home_crash。
示例提交信息格式
feat: 新增订单页面
fix: 修复订单页面的显示问题
refactor: 重构订单页面的状态管理逻辑
总结
在 Flutter 和 Dart 开发中,良好的开发规范不仅提升了代码的可读性,还能提高项目的可维护性。