Flutter资源生成插件resources_generator的使用

Flutter资源生成插件resources_generator的使用

特性

通过assets/文件夹生成一个资源类,类似于Android中的R类。

配置

此生成器支持生成通用的assets文件夹和按口味(flavors)划分的assets文件夹。

没有口味时

assets文件夹的必要结构:

<your-project>
├── <assets-folder>/
   ├── images/ (用于图片)
   ├── vectors/ (用于矢量图或SVG)
   ├── translations/ (用于本地化)
   ├── fonts/ (用于字体)
   ├── scripts/ (用于Shell脚本)
   ├── configs/ (用于JSON配置)
   ├── raws/ (用于原始文件)
├── lib/
├── pubspec.yaml

有口味时

assets文件夹的必要结构:

<your-project>
├── <assets-folder>/
   ├── all/ (所有口味通用)
      ├── images/ (用于图片)
      ├── vectors/ (用于矢量图或SVG)
      ├── translations/ (用于本地化)
      ├── fonts/ (用于字体)
      ├── scripts/ (用于Shell脚本)
      ├── configs/ (用于JSON配置)
      ├── raws/ (用于原始文件)
   ├── <flavor-0>
      ├── ... (与all/相同)
   ├── <flavor-1>
      ├── ... (与all/相同)
   ├── <flavor-2>
      ├── ... (与all/相同)
   ├── ...
├── lib/
├── pubspec.yaml

使用方法

激活生成器执行文件:

dart pub global activate resources_generator

进入项目根目录:

cd <your-project>

执行生成器:

dart pub global run resources_generator:generate -i <assets-folder> -o <output-folder> -p <optional-package> -f

自动监控资产变化并生成:

dart pub global run resources_generator:monitor -i <assets-folder> -o <output-folder> -p <optional-package> -f

参数说明:

  • -i--input:可选,输入的资产文件夹,默认为assets
  • -o--output:可选,输出文件夹,默认为lib/resources
  • -p--package:可选,包名,如果资产在模块中而不是应用中。
  • -f--with-flavor:可选,将资源类生成到口味中。

注意事项

字体生成

生成字体时,字体文件名必须遵循以下格式:<family>-<attr-1>-<attr-2>.ttf,其中attrs表示字体样式和粗细。这些属性是可选的。
示例:

Roboto.ttf, Roboto-Italic.ttf, Roboto-Italic-w600.ttf

颜色生成

生成颜色时,所有以colors为前缀的JSON文件都会被处理。根据此类文件的数量,生成器会生成合适的资源文件。
示例:

单个文件(单变体颜色):

├── <assets-folder>/
   ├── colors/
      ├── colors.json

多个文件(多变体颜色):

├── <assets-folder>/
   ├── colors/
      ├── colors_dark.json
      ├── colors_light.json

完整示例

项目结构

my_project/
├── assets/
   ├── images/
      ├── logo.png
      ├── background.jpg
   ├── fonts/
      ├── Roboto-Regular.ttf
      ├── Roboto-Bold.ttf
   ├── colors/
      ├── colors.json
├── lib/
├── pubspec.yaml

生成命令

dart pub global run resources_generator:generate -i assets -o lib/resources

生成后的资源类示例(lib/resources/assets.dart):

class Assets {
  // 图片
  static const String imageLogo = 'assets/images/logo.png';
  static const String imageBackground = 'assets/images/background.jpg';

  // 字体
  static const String fontRobotoRegular = 'assets/fonts/Roboto-Regular.ttf';
  static const String fontRobotoBold = 'assets/fonts/Roboto-Bold.ttf';

  // 颜色
  static const Map<String, dynamic> colors = {
    "primary": "#000000",
    "secondary": "#FFFFFF",
  };
}

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

1 回复

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


resources_generator 是一个用于 Flutter 项目的资源生成插件,它可以帮助开发者自动化生成资源文件(如图片、字体、JSON 等)的引用代码,从而减少手动编写资源引用代码的工作量。

安装 resources_generator

  1. pubspec.yaml 中添加依赖:

    首先,你需要在 pubspec.yaml 文件中添加 resources_generatorbuild_runner 作为开发依赖。

    dev_dependencies:
      build_runner: ^2.1.0
      resources_generator: ^5.0.0
    
  2. 运行 flutter pub get 安装依赖:

    在终端中运行以下命令来安装依赖:

    flutter pub get
    

配置 resources_generator

  1. 在项目中创建 build.yaml 文件:

    在项目的根目录下创建一个 build.yaml 文件,用于配置 resources_generator

    targets:
      $default:
        builders:
          resources_generator|resources_builder:
            options:
              output: lib/generated/resources.dart
              package_name: your_package_name
    
    • output: 指定生成的 Dart 文件的路径和名称。
    • package_name: 替换为你的 Flutter 项目的包名。
  2. pubspec.yaml 中声明资源:

    确保你在 pubspec.yaml 文件中已经声明了需要生成的资源,例如图片、字体等。

    flutter:
      assets:
        - assets/images/
      fonts:
        - family: MyCustomFont
          fonts:
            - asset: assets/fonts/MyCustomFont.ttf
    

生成资源文件

  1. 运行 build_runner

    在终端中运行以下命令来生成资源文件:

    flutter pub run build_runner build
    

    这将会在 lib/generated/ 目录下生成一个 resources.dart 文件,其中包含了所有资源的引用代码。

  2. 使用生成的资源:

    你可以在代码中直接使用生成的资源引用。例如:

    import 'package:your_package_name/generated/resources.dart';
    
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Image.asset(R.assets.images.my_image);
      }
    }
    

    其中 R.assets.images.my_image 是自动生成的资源引用。

自动生成资源文件

如果你希望在每次更改资源时自动重新生成资源文件,可以使用 watch 模式:

flutter pub run build_runner watch
回到顶部