Flutter资源文件生成插件flutter_assets_generator的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter资源文件生成插件flutter_assets_generator的使用

lib/const/resource.dart 中自动生成 R 文件(仿安卓短命名)

截图

img

安装及使用

使用源码的方式

添加 Dart 至环境变量

git clone https://github.com/goodswifter/flutter_assets_generator.git
cd flutter_assets_generator
dart bin/flutter_assets_generator.dart ./example

./example 是 Flutter 项目的地址。

pub global

推荐使用这种方式。有关 pub global 的详细信息请参阅官方文档

pub, dart 添加到 $PATH 环境变量下。如果不添加也可以,使用 Dart 和 Pub 的全路径也可以。

参阅官方文档添加 ~/.pub-cache/bin 至环境变量下(Windows 请查阅文档)。

确保:

dart --version
pub --version

有正确的输出。

安装:

$ dart pub global activate flutter_assets_generator

使用: 在 Flutter 目录下执行

fgen

fgen -s .

注意这个 .,这里第二个目录就是你的 Flutter 目录,可以省略,省略后默认在当前文件夹。

也就是说,在 Flutter 项目下使用 fgen 即可。

支持的命令行参数

使用 $ fgen -h$ fgen --help 可以查看帮助文档

fgen -h
-w, --[no-]watch    Continue to monitor changes after execution of orders.
                    (defaults to on)

-p, --[no-]preview  Generate file with preview comments.
                    (defaults to on)

-o, --output        Your resource file path.
                    If it is a relative path, the relative flutter root directory
                    (defaults to "lib/const/resource.dart")

-s, --src           Flutter project root path
                    (defaults to ".")

-n, --name          The class name for the constant.
                    (defaults to "R")

-h, --[no-]help     Help usage

-d, --[no-]debug    debug info
  • -s 是 Flutter 目录。
  • -o 是生成的资源文件地址,需要包含 .dart
  • 如果你在 Flutter 目录下执行,仅需 fgen 即可。
  • 可以加 --no-watch 参数来不监听文件变化,仅生成一次资源文件。

关于文件名

文件中的空格、/-. 会被转为 _@ 会被转为 _AT_

转化的例子如下

    images/1.png => IMAGES_PNG
    images/hello_world.jpg => IMAGES_HELLO_WORLD_JPG
    images/hello-world.jpg => IMAGES_HELLO_WORLD_JPG

会包含文件夹名称的原因是你 pubspec 中可能会包含多个文件夹目录,或你的文件夹会包含多层级,甚至你的资产目录中会包含非图片(如数据库,json 等)资产。

如下情况会出现错误

  images/
    main_login.png
    main/
      login.png

因为两个的字段命名方式是完全相同的。

配置文件

配置文件为约定式,不支持通过命令指定,该文件为项目根目录下(与 pubspec.yaml 同级)下的 fgen.yaml

排除和导入

使用 glob 语法

其中 exclude 节点下为排除的文件名,类型是字符串数组,如未包含任何规则则表示不排除任何文件。

include 表示需要导入的文件名,字符串数组,如果未包含任何规则表示允许所有。

优先级方面,exclude 高于 include,换句话说:

先根据 include 节点导入文件,然后 exclude 排除文件。

典型示例
exclude:
  - "**/add*.png"
  - "**_**"

include:
  - "**/a*.png"
  - "**/b*"
  - "**/c*"
assets
├── address.png   # exclude by "**/add*.png"
├── address@at.png  # exclude by "**/add*.png"
├── bluetoothon-fjdfj.png
├── bluetoothon.png
└── camera.png

images
├── address space.png  # exclude by "**/add*.png"
├── address.png  # exclude by "**/add*.png"
├── addto.png  # exclude by "**/add*.png"
├── audio.png
├── bluetooth_link.png  # exclude by **_**
├── bluetoothoff.png
├── child.png
└── course.png
/// Generate by [resource_generator](https://github.com/CaiJingLong/flutter_resource_generator) library.
/// PLEASE DO NOT EDIT MANUALLY.
class R {

  /// ![preview](file:///Users/jinglongcai/code/dart/self/flutter_resource_generator/example/assets/bluetoothon-fjdfj.png)
  static const String ASSETS_BLUETOOTHON_FJDFJ_PNG = 'assets/bluetoothon-fjdfj.png';

  /// ![preview](file:///Users/jinglongcai/code/dart/self/flutter_resource_generator/example/assets/bluetoothon.png)
  static const String ASSETS_BLUETOOTHON_PNG = 'assets/bluetoothon.png';

  /// ![preview](file:///Users/jinglongcai/code/dart/self/flutter_resource_generator/example/assets/camera.png)
  static const String ASSETS_CAMERA_PNG = 'assets/camera.png';

  /// ![preview](file:///Users/jinglongcai/code/dart/self/flutter_resource_generator/example/images/audio.png)
  static const String IMAGES_AUDIO_PNG = 'images/audio.png';

  /// ![preview](file:///Users/jinglongcai/code/dart/self/flutter_resource_generator/example/images/bluetoothoff.png)
  static const String IMAGES_BLUETOOTHOFF_PNG = 'images/bluetoothoff.png';

  /// ![preview](file:///Users/jinglongcai/code/dart/self/flutter_resource_generator/example/images/child.png)
  static const String IMAGES_CHILD_PNG = 'images/child.png';

  /// ![preview](file:///Users/jinglongcai/code/dart/self/flutter_resource_generator/example/images/course.png)
  static const String IMAGES_COURSE_PNG = 'images/course.png';
}

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

1 回复

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


当然,以下是一个关于如何使用 flutter_assets_generator 插件来生成 Flutter 资源文件的示例代码和步骤。flutter_assets_generator 是一个用于自动生成 Flutter 项目中资源文件的插件,可以极大地简化资源的管理。

1. 安装插件

首先,确保你已经在 pubspec.yaml 文件中添加了 flutter_assets_generator 插件:

dependencies:
  flutter:
    sdk: flutter
  flutter_assets_generator: ^x.y.z  # 替换为最新版本号

然后在项目根目录下运行 flutter pub get 来安装插件。

2. 配置 build.yaml

在项目的根目录下创建或编辑 build.yaml 文件,配置资源文件的生成规则。以下是一个示例配置:

targets:
  $default:
    builders:
      flutter_assets_generator:
        enabled: true
        options:
          output_class: 'Assets'  # 生成的 Dart 类名
          assets_dir: 'assets'    # 资源文件存放的目录

3. 创建资源文件

在项目的根目录下创建一个名为 assets 的文件夹(如果你配置的是其他目录,则创建相应目录),然后在该文件夹中放置你的资源文件,比如图片、JSON 文件等。

例如,在 assets 文件夹中创建一个名为 images 的子文件夹,并在其中放置一些图片文件,如 image1.png, image2.jpg

4. 运行生成脚本

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

flutter pub run flutter_assets_generator:generate

这个命令会根据 build.yaml 中的配置生成一个 Dart 文件,通常命名为 assets.g.dart,该文件会自动放在 lib 目录下。

5. 使用生成的资源

现在你可以在你的 Flutter 项目中通过生成的 Dart 类来访问资源文件了。以下是一个使用示例:

import 'package:your_app_name/assets.g.dart';  // 导入生成的资源文件
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Asset Generator Demo'),
        ),
        body: Center(
          child: Image.asset(Assets.imagesImage1Png),  // 使用生成的资源路径
        ),
      ),
    );
  }
}

在上面的代码中,Assets.imagesImage1Png 是根据资源文件名自动生成的访问路径。

总结

通过上述步骤,你已经成功配置并使用了 flutter_assets_generator 插件来生成和管理 Flutter 项目中的资源文件。这不仅简化了资源的管理,还提高了代码的可维护性和可读性。

回到顶部