Saltar al contenido principal

Transformar assets al momento de la compilación (build time)

Cómo configurar la transformación automática de imágenes (y otros assets) en tu app de Flutter.

Puedes configurar tu proyecto para transformar automáticamente los assets al momento de la compilación (build time) usando paquetes de Dart compatibles.

Especificar transformaciones de assets

#

En el archivo pubspec.yaml, enumera los assets que se van a transformar y el paquete transformador asociado.

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

Con esta configuración, assets/logo.svg es transformado por el paquete vector_graphics_compiler a medida que se copia a la salida del build. Este paquete precompila archivos SVG en un archivo binario optimizado que se puede mostrar usando el paquete vector_graphics, de esta manera:

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

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

Pasar argumentos a los transformadores de assets

#

Para pasar una cadena de argumentos a un transformador de assets, especifícala también en el pubspec:

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

Encadenar transformadores de assets

#

Los transformadores de assets se pueden encadenar y se aplican en el orden en que están declarados. Considera el siguiente ejemplo usando paquetes imaginarios:

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

Aquí, bird.png es transformado por el paquete grayscale_filter. La salida se transforma luego por el paquete png_optimizer antes de ser empaquetada en la app construida.

Escribir paquetes de transformadores de assets

#

Un transformador de assets es una aplicación de línea de comandos de Dart que se invoca con dart run con al menos dos argumentos: --input, que contiene la ruta al archivo a transformar y --output, que es la ubicación donde el código del transformador debe escribir su salida.

Si el transformador finaliza con un código de salida distinto de cero, la compilación de la aplicación falla con un mensaje de error que explica que falló la transformación del asset. Cualquier cosa escrita en el flujo stderr del proceso por el transformador se incluye en el mensaje de error.

Durante la invocación del transformador, la variable de entorno FLUTTER_BUILD_MODE se establecerá con el nombre de la CLI del modo de compilación utilizado. Por ejemplo, si ejecutas tu app con flutter run -d macos --release, entonces FLUTTER_BUILD_MODE se establecerá en release.

Muestra (Sample)

#

Para ver un proyecto de ejemplo de Flutter que usa transformación de assets e incluye un paquete de Dart personalizado que se utiliza como transformador, consulta el proyecto asset_transformers en el repositorio de ejemplos de Flutter.