ds_builder 1.0.4
ds_builder: ^1.0.4 copied to clipboard
Flutter项目构建工具,包括路由代码生成和资源R文件生成。与build_runner无缝集成。
DS Builder #
Flutter项目的构建工具集合。包括路由代码生成和资源R文件生成。
功能特性 #
- 路由生成器:从
route_config.dart自动生成路由配置 - 资源生成器:扫描assets目录并生成类型安全的R类,包含所有资源常量
- 灵活配置:通过
ds_builder_config.yaml进行灵活配置 - 零配置:开箱即用,提供合理的默认值- 通用设计:自动检测项目包名,支持任何Flutter项目
安装 #
在 pubspec.yaml 中添加:
dev_dependencies:
build_runner: ^2.4.0
ds_builder: ^1.0.0
使用 #
路由生成器 #
- 创建
lib/route_config.dart:
const List<List<Object>> routesConfig = [
['auth', '/login', 'LoginPage', false, false],
['home', '/home', 'HomePage', false, true],
['workflow', '/workflow/:id', 'WorkflowPage', true, true],
['public', '/about', 'AboutPage', false, false],
];
格式:[group, path, pageName, hasParams, requireLogin]
hasParams:是否通过state.extra传参requireLogin:是否需要登录校验;false时会跳过redirect中的登录拦截- 兼容旧格式:4 个参数时默认
requireLogin = true
- 运行build_runner:
dart run build_runner build
这会生成 lib/router.g.dart,包含:
RouteNames类,含所有路由常量- GoRouter 配置
- 命名路由定义
资源生成器 #
- 在
assets/目录中放置资源:
assets/
├── images/
│ ├── home/
│ │ ├── logo.png
│ │ └── avatar.png
│ └── form/
│ └── attachment.svg
└── file/
└── config.json
- 运行build_runner:
dart run build_runner build
这会生成 lib/res/r.dart,包含:
class R {
R._();
static const String logoPng = 'assets/images/home/logo.png';
static const String avatarPng = 'assets/images/home/avatar.png';
static const String attachmentSvg = 'assets/images/form/attachment.svg';
static const String configJson = 'assets/file/config.json';
}
配置 #
在项目根目录创建 ds_builder_config.yaml 来自定义行为:
# 扫描资源时忽略的目录
ignoreDirs:
- images/emoji
- images/country
- fonts
如果配置文件缺失,将使用默认值。
项目设置 #
最小配置(使用默认值) #
# 仅需运行build_runner
dart run build_runner build
完整配置(带自定义设置) #
- 在
dev_dependencies中添加ds_builder - 创建
ds_builder_config.yaml进行自定义 - 运行:
dart run build_runner build
生成的文件 #
lib/router.g.dart- 路由配置lib/res/r.dart- 资源常量
将这些添加到 .gitignore (可选 - 通常建议提交以确保版本一致性):
# 生成的文件(保留以确保一致的构建)
lib/router.g.dart
lib/res/r.dart
使用示例 #
使用生成的路由 #
import 'package:go_router/go_router.dart';
import 'router.g.dart';
final router = goRouter;
// 导航
context.go(RouteNames.home);
context.push(RouteNames.workflow, extra: {'id': 123});
使用生成的资源 #
import 'res/r.dart';
Image.asset(R.logoPng);
SvgPicture.asset(R.attachmentSvg);
故障排查 #
构建失败 "找不到 route_config.dart" #
确保 lib/route_config.dart 存在于你的项目中。
配置了免登录路由但仍被跳转到登录页 #
- 检查
routesConfig第 5 个参数是否为false - 确保访问路径与配置路径匹配(例如
/about) - 重新执行:
dart run build_runner build --delete-conflicting-outputs
资源未出现在 R.dart 中 #
- 检查资源是否在
assets/目录中 - 验证
pubspec.yaml中的路径:flutter: assets: - assets/
配置文件未被读取 #
确保 ds_builder_config.yaml 在项目根目录,而不是子目录中。
性能 #
Builder在 dart run build_runner build 期间运行,并被缓存。后续构建由于增量生成而更快。
开发模式下的监听模式:
dart run build_runner watch
dart pub publish --dry-run
许可证 #
MIT
贡献 #
欢迎贡献!请向仓库提交Pull Request。
支持 #
遇到问题或功能请求,请访问 GitHub仓库。