构建时转换资源
如何在你的 Flutter 应用中设置图像(和其他资源)的自动转换。
你可以配置你的项目,使用兼容的 Dart 包在构建时自动转换资源。
指定资源转换
#在 pubspec.yaml 文件中,列出要转换的资源以及相关的转换器包。
flutter:
assets:
- path: assets/logo.svg
transformers:
- package: vector_graphics_compiler
使用此配置,assets/logo.svg 将由 vector_graphics_compiler 包在复制到构建输出时进行转换。该包会将 SVG 文件预编译为优化的二进制文件,可以使用 vector_graphics 包显示,如下所示
import 'package:vector_graphics/vector_graphics.dart';
const Widget logo = VectorGraphic(loader: AssetBytesLoader('assets/logo.svg'));
向资源转换器传递参数
#要向资源转换器传递一个字符串参数,也请在 pubspec 中指定它
flutter:
assets:
- path: assets/logo.svg
transformers:
- package: vector_graphics_compiler
args: ['--tessellate', '--font-size=14']
链式资源转换器
#资源转换器可以链式调用,并且按照它们声明的顺序应用。考虑以下使用虚构包的示例
flutter:
assets:
- path: assets/bird.png
transformers:
- package: grayscale_filter
- package: png_optimizer
这里,bird.png 将由 grayscale_filter 包转换。然后,输出将由 png_optimizer 包转换,然后将其捆绑到构建的应用程序中。
编写资源转换器包
#资源转换器是一个 Dart 命令行应用,它使用 dart run 调用,至少包含两个参数:--input,其中包含要转换的文件的路径,以及 --output,这是转换器代码必须写入其输出的位置。
如果转换器以非零退出代码完成,应用程序构建将失败,并显示一条错误消息,解释资源转换失败。转换器写入 stderr 流的任何内容都将包含在错误消息中。
在调用转换器期间,环境变量 FLUTTER_BUILD_MODE 将设置为正在使用的构建模式的 CLI 名称。例如,如果你使用 flutter run -d macos --release 运行你的应用,那么 FLUTTER_BUILD_MODE 将被设置为 release。
示例
#有关使用资源转换的示例 Flutter 项目,以及包含用作转换器的自定义 Dart 包,请查看 Flutter samples repo 中的 asset_transformers 项目。