Dart Drift 是一个面向非 Flutter 的 Dart 持久化工程技能,用于在 Dart CLI、服务端任务和原生桌面应用中构建、修复、审计和迁移 Drift 持久化代码。
用途 该技能定位为「Dart 持久化工程师」。其核心原则是:不要凭记忆编写 Drift 数据库代码。应先识别运行时后端,阅读对应的操作参考文档,再用 Dart 工具链验证生成的代码。资料指出,损坏的持久化代码比没有持久化代码更糟,因为模式(schema)和迁移错误可能静默丢失数据。
工作流程
- 改代码前先检查项目:pubspec.yaml、已有数据库类、build.yaml、生成的部分、测试、迁移文件,以及应用面向 SQLite、PostgreSQL 还是两者。
- 选择后端路径:Dart CLI、服务端任务或原生桌面本地存储使用 package:drift/native.dart 的 SQLite;服务端 PostgreSQL 使用 drift_postgres 配合 package:postgres,并在 build.yaml 中启用 Postgres SQL 方言;若涉及 Flutter UI 集成,则停止并改用 flutter-drift 技能。
- 只阅读当前任务所需的参考文件。
- 使用这些参考中的 API 和注意事项实现最小安全改动。
- 执行强制验证。若无法验证,应报告阻塞点和具体风险,而不是把改动呈现为已验证。
资源路由 技能按任务指引阅读对应参考:添加 Drift 到 Dart 应用、选择依赖、打开 SQLite/Postgres 连接或修复构建设置时阅读 references/setup.md;定义表、约束、索引、默认值或 PostgreSQL 自定义类型时阅读 references/tables.md;编写 SELECT、WHERE、JOIN、聚合、子查询或自定义列代码时阅读 references/queries.md;插入、更新、删除、upsert、批处理或事务代码时阅读 references/writes.md;添加或修复响应式流、自定义 SQL 流、更新通知或表更新监听器时阅读 references/streams.md;添加或修改模式迁移时阅读 references/migrations.md;配置 PostgreSQL、连接池、自定义类型或 Postgres 特有函数时阅读 references/postgres.md;编辑此技能或其示例时运行 scripts/verify-examples.sh 做确定性冒烟检查。
强制验证 依赖变更后运行 dart pub get;更改 Drift 表、数据库类、DAO、SQL 文件或生成部分后运行 dart run build_runner build 和 dart analyze;更改行为后运行最窄的相关 dart test 目标,若没有测试,则添加或描述一个针对数据库操作的聚焦冒烟测试;迁移变更后运行 dart run drift_dev make-migrations 以及配置的 test_dir 中生成的迁移测试;编辑此技能、参考或可复用示例后运行 dart-drift/scripts/verify-examples.sh。
限制 该技能仅限 Dart CLI、服务端和非 Flutter 桌面应用,不添加 StreamBuilder、Riverpod、Provider、drift_flutter 或 Flutter 专有存储模式。新增依赖优先使用 dart pub add ...,仅在匹配现有仓库策略时硬编码版本。不使用基于 HostEndpoint、PgEndpoint、postgres_pool.dart、postgresUuid()、postgresJson()、PostgresTypes 或 gen_random_uuid 的已弃用 PostgreSQL 示例。PostgreSQL 场景避免使用 SQLite 专属的 currentDateAndTime 和大多数 dateTime() 便捷 API,改用 PgTypes.date、PgTypes.timestampWithTimezone、PgTypes.timestampNoTimezone 和 now()。除非用户明确豁免风险,否则不得用手动推理替代代码生成或迁移验证。
回退策略 若目标仓库上下文不足以选择后端,询问目标是 SQLite 还是 PostgreSQL。若网络、数据库或工具链访问导致无法验证,则给出失败的确切命令和剩余风险。
适用场景与限制概述 该技能适用于以 Drift 作为 Dart 持久化层、且不涉及 Flutter UI 的项目,包括命令行工具、服务端作业和原生桌面本地存储。其限制在于明确排除 Flutter 集成模式,并禁止以手动推理替代生成与迁移验证;具体支持情况需以仓库实际上下文与工具链验证结果为准。
资料中未提供的部分:具体版本号、安装命令细节以外的依赖清单、定价或收费信息、性能基准、平台兼容性列表等,暂未提供。