你可以配置你的项目,使其在构建时自动使用兼容的 Dart 包来转换资产。

指定资产转换

#

pubspec.yaml 文件中,列出要转换的资产和关联的转换器包。

yaml
flutter:
  assets:
    - path: assets/logo.svg
      transformers:
        - package: vector_graphics_compiler

通过此配置,assets/logo.svg 会在复制到构建输出时,由 vector_graphics_compiler 包进行转换。该包将 SVG 文件预编译为优化后的二进制文件,可以使用 vector_graphics 包显示,如下所示

dart
import 'package:vector_graphics/vector_graphics.dart';

const Widget logo = VectorGraphic(loader: AssetBytesLoader('assets/logo.svg'));

向资产转换器传递参数

#

要将一组参数传递给资产转换器,也需要在 pubspec 中指定

yaml
flutter:
  assets:
    - path: assets/logo.svg
      transformers:
        - package: vector_graphics_compiler
          args: ['--tessellate', '--font-size=14']

链式资产转换器

#

资产转换器可以链式调用,并按照声明的顺序应用。请看以下使用虚构包的示例

yaml
flutter:
  assets:
    - path: assets/bird.png
      transformers:
        - package: grayscale_filter
        - package: png_optimizer

在这里,bird.pnggrayscale_filter 包转换。然后,输出再由 png_optimizer 包转换,最后才打包到构建好的应用程序中。

编写资产转换器包

#

资产转换器是一个 Dart 命令行应用程序,它通过 dart run 调用,并至少带有两个参数:--input,包含要转换的文件的路径;以及 --output,是转换器代码必须写入其输出的位置。

如果转换器以非零退出代码结束,应用程序构建将失败,并显示错误消息,解释资产转换失败。转换器写入到进程的 stderr 流的任何内容都将包含在错误消息中。

在调用转换器期间,FLUTTER_BUILD_MODE 环境变量将被设置为所使用的构建模式的 CLI 名称。例如,如果您使用 flutter run -d macos --release 运行您的应用程序,则 FLUTTER_BUILD_MODE 将被设置为 release

示例

#

要查看一个使用资产转换并包含用作转换器的自定义 Dart 包的 Flutter 示例项目,请查阅 Flutter 示例仓库中的 asset_transformers 项目