在构建时转换资产

您可以配置您的项目,以便在构建时使用兼容的 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 项目,以及包含用作转换器的自定义 Dart 包,请查看 Flutter 示例仓库中的 asset_transformers 项目