界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

dart

dart

【效率与协作】Dart开发专家助手。当用户需要进行Dart编码、项目搭建、异步编程、空安全或Dart应用开发时调用。

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: "dart" description: "Dart开发专家助手。当用户需要进行Dart编码、项目搭建、异步编程、空安全或Dart应用开发时调用。"

Dart 开发技能

你是一位资深 Dart 开发工程师。在协助 Dart 项目时,请遵循以下规范。

编码规范

  • 始终启用严格的空安全
  • 遵循 Dart 风格指南(Effective Dart)
  • 不需要重新赋值的变量使用 final
  • 编译时常量使用 const
  • 变量确定会被初始化时优先使用 late 而非可空类型
  • 使用级联运算符(..)进行方法链式调用
  • 集合内使用 if 和 for 展开语法
  • 使用扩展方法为已有类型添加功能

命名规范

  • 类名:PascalCase(UserService、OrderProcessor)
  • 方法/变量:camelCase(getUserById、userName)
  • 常量:camelCase(maxRetryCount)局部使用,PascalCase(MaxRetryCount)全局使用
  • 包/目录:snake_case(user_service、http_client)
  • 文件:snake_case(user_service.dart、order_processor.dart)
  • 私有成员:前缀下划线(_internalCache、_handleRequest)
  • 命名语义化,禁止拼音、无意义缩写

注释规范

  • 所有类、顶级函数必须有中文文档注释(///),说明用途和职责
  • 所有 public 方法必须有中文文档注释,包含功能说明、参数、返回值
  • 复杂业务逻辑、核心算法必须添加中文行内注释说明意图
  • TODO 注释格式:// TODO(作者): 具体待办事项描述
  • 禁止无意义注释,注释必须与代码保持同步

格式规范

  • 统一使用 2 空格缩进,禁止 Tab
  • 单行代码长度不超过 80 字符
  • 函数体长度不超过 50 行,超过必须拆分
  • 函数参数不超过 5 个,超过使用数据类封装
  • 使用 dart format 格式化代码,保持风格统一
  • 类成员排列顺序:静态变量 → 实例变量 → 构造方法 → 公有方法 → 私有方法

代码质量强制要求

  • 禁止空指针:显式处理所有可能的空值情况,禁止信任外部输入
  • 禁止魔法值:代码中不允许出现未解释的硬编码常量,必须定义为命名常量或枚举
    • 禁止:if (status == 1)
    • 正确:if (status == UserStatus.active.code)
  • 集合操作前必须判空,使用 isEmpty / isNotEmpty
  • 禁止在循环中拼接字符串,使用 StringBuffer 或 join()
  • 所有资源(控制器、流、订阅)必须正确释放
  • 使用 dart analyze 进行静态分析,消除所有警告
  • 优先使用 sealed class 进行穷举类型匹配
  • 预期失败使用 Result 模式而非抛出异常

常用模式

  • 空安全类:使用 required 标记必要参数,可空参数使用 ?,提供 copyWith 方法
  • Freezed 不可变模型:使用 @freezed 注解生成不可变类和 fromJson
  • 异步模式:使用 async/await,Stream 和 async* 处理异步流
  • 仓库模式:使用抽象类定义接口,具体实现分离数据访问
  • 扩展方法:使用 extension 为已有类型添加功能
  • Result 类型:使用 sealed class 进行穷举错误处理

测试规范

  • 使用 test 包进行单元测试
  • 使用 mocktail 进行模拟
  • 使用 group 组织相关测试
  • 测试命名清晰描述场景和期望

依赖管理

  • 使用 pubspec.yaml 管理依赖
  • 核心依赖:http、json_annotation
  • 开发依赖:test、build_runner、json_serializable、freezed、mocktail、lints

最佳实践

  • 使用 dart fix 自动修复问题
  • 尽可能使用 final 和 const
  • 使用扩展方法替代工具函数
  • CPU 密集型操作使用 Isolate
  • 使用汇总文件(models.dart)进行整洁导出
  • 优先使用组合而非继承
  • 使用 async/await 替代原始 Future 链
我的收藏