Flutter代码生成插件generators_lite的使用
Flutter代码生成插件generators_lite的使用

概述
generators_lite
是一个基于 package:build_runner
的代码生成工具包,支持多种生成器,包括资源文件、国际化(I18N)、数据类以及图标字体。通过统一的方式管理所有生成器,简化开发流程。
功能概览
目前支持以下生成器:
- Assets Generator:用于迁移文件结构到嵌套的Dart类。
- I18N Generator:主要用于处理翻译文件的自动补全。
- Data Class Generator:从预定义的配置生成完整的Dart类。
- Icon Fonts Generator:实时生成基于
.svg
文件的Web字体。
安装
在 pubspec.yaml
文件中添加依赖:
dev_dependencies:
build_runner: any
generators_lite:
或者直接使用命令行安装并运行:
dart pub global activate generators_lite
generate <command> [arguments]
也可以直接调用主程序:
dart run generators_lite:main <command> [arguments]
例如:
generate assets --import-path source/assets --export-path lib/assets.g.dart
generate i18n -i source/i18n -e lib/i18n.g.dart
generate models -i models.json -e lib/models.g.dart
generate icons -i source/icons -e lib/icons.g.dart
使用
配置 build.yaml
generators_lite
使用 build.yaml
文件进行配置。以下是完整的示例:
# yaml-language-server: $schema=./build.yaml
targets:
$default:
sources:
include:
- '**'
- lib/$lib$
- $package$
exclude:
- .dart_tool/**
builders:
generators_lite|assets:
enabled: true
options:
import_path: source/assets
export_path: lib/src/generated/assets.g.dart
base_name: CustomAssets
generators_lite|i18n:
enabled: true
options:
import_path: source/i18n
export_path: lib/src/generated/i18n.g.dart
encoding: utf-8
imports:
- ../custom_l10n.dart
base_name: CustomI18N
base_class_name: CustomL10N
enum_class_name: I18NLocaleCustom
generators_lite|models:
enabled: true
options:
import_path: source/models.json
export_path: lib/src/generated/models.g.dart
imports:
- ../custom_json_converters.dart
generators_lite|icons:
enabled: true
options:
import_path: source/icons
export_path: lib/src/generated/icons.g.dart
font_export_path: source/icons.ttf
base_name: CustomIcons
font_family: IconsFont
height: 24
descent: 8
normalize: true
npm_package:
private: true
devDependencies:
fantasticon: ^1.2.3
base_code_point: 0xf101
各生成器详解
Assets Generator
将指定目录的文件结构映射为嵌套的Dart类。
示例配置:
generators_lite|assets:
enabled: true
options:
import_path: source/assets
export_path: lib/src/generated/assets.g.dart
base_name: CustomAssets
I18N Generator
用于处理多语言资源文件的自动化生成。
示例配置:
generators_lite|i18n:
enabled: true
options:
import_path: source/i18n
export_path: lib/src/generated/i18n.g.dart
base_name: CustomI18N
base_class_name: CustomL10N
enum_class_name: I18NLocaleCustom
Data Class Generator
根据预定义的 JSON 或 YAML 文件生成数据类。
示例配置:
generators_lite|models:
enabled: true
options:
import_path: source/models.json
export_path: lib/src/generated/models.g.dart
imports:
- ../custom_json_converters.dart
Icon Fonts Generator
从 .svg
文件生成 Web 字体。
示例配置:
generators_lite|icons:
enabled: true
options:
import_path: source/icons
export_path: lib/src/generated/icons.g.dart
font_export_path: source/icons.ttf
base_name: CustomIcons
font_family: IconsFont
height: 24
descent: 8
normalize: true
npm_package:
private: true
devDependencies:
fantasticon: ^1.2.3
base_code_point: 0xf101
运行生成器
执行以下命令以运行生成器:
dart run build_runner build --delete-conflicting-outputs
为了更方便地集成到 VS Code 中,可以设置任务:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "build_runner",
"command": "flutter",
"args": [
"pub",
"run",
"build_runner",
"watch",
"--delete-conflicting-outputs",
"--low-resources-mode"
],
"isBackground": true,
"presentation": {
"echo": true,
"reveal": "silent",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
},
"problemMatcher": ["$dart-build_runner"],
"runOptions": {
"runOn": "folderOpen"
}
}
]
}
更多关于Flutter代码生成插件generators_lite的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter代码生成插件generators_lite的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
generators_lite
是一个用于 Flutter 的代码生成插件,它可以帮助开发者自动生成一些常见的代码,例如模型类、序列化代码、路由配置等。使用 generators_lite
可以减少手动编写重复代码的工作量,提高开发效率。
以下是如何使用 generators_lite
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 generators_lite
和 build_runner
依赖。
dev_dependencies:
generators_lite: ^1.0.0
build_runner: ^2.1.0
2. 创建模型类
假设你有一个 JSON 数据,你想将其转换为 Dart 模型类。首先,创建一个 Dart 文件,例如 user.dart
,并在其中定义一个类。
import 'package:generators_lite/generators_lite.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final int age;
User(this.name, this.age);
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
3. 生成代码
在终端中运行以下命令来生成代码:
flutter pub run build_runner build
这将会生成 user.g.dart
文件,其中包含 fromJson
和 toJson
方法的实现。
4. 使用生成的代码
现在你可以在你的应用中使用生成的代码来解析和序列化 JSON 数据。
void main() {
final json = '{"name": "John", "age": 30}';
final user = User.fromJson(jsonDecode(json));
print(user.name); // 输出: John
print(user.age); // 输出: 30
}
5. 其他功能
generators_lite
还支持生成其他类型的代码,例如路由配置、服务类等。你可以根据项目需求使用不同的注解和生成器。
6. 清理生成的文件
如果你想要清理生成的文件,可以运行以下命令:
flutter pub run build_runner clean