Flutter代码生成插件generators_lite的使用

Flutter代码生成插件generators_lite的使用

Logo

概述

generators_lite 是一个基于 package:build_runner 的代码生成工具包,支持多种生成器,包括资源文件、国际化(I18N)、数据类以及图标字体。通过统一的方式管理所有生成器,简化开发流程。


功能概览

目前支持以下生成器:

  1. Assets Generator:用于迁移文件结构到嵌套的Dart类。
  2. I18N Generator:主要用于处理翻译文件的自动补全。
  3. Data Class Generator:从预定义的配置生成完整的Dart类。
  4. 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

1 回复

更多关于Flutter代码生成插件generators_lite的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


generators_lite 是一个用于 Flutter 的代码生成插件,它可以帮助开发者自动生成一些常见的代码,例如模型类、序列化代码、路由配置等。使用 generators_lite 可以减少手动编写重复代码的工作量,提高开发效率。

以下是如何使用 generators_lite 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 generators_litebuild_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 文件,其中包含 fromJsontoJson 方法的实现。

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
回到顶部