跳至主要內容

在建置時轉換資源

您可以設定您的專案,以使用相容的 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.png 會先由 grayscale_filter 套件轉換。然後輸出會由 png_optimizer 套件轉換,最後才被打包到建置的應用程式中。

撰寫資源轉換器套件

#

資源轉換器是一個 Dart 命令列應用程式,會使用 dart run 搭配至少兩個引數來調用:--input,其中包含要轉換的檔案路徑;以及 --output,轉換器程式碼必須將其輸出寫入的位置。

如果轉換器應用程式以非零的結束代碼完成,建置會失敗並顯示錯誤訊息,說明資源轉換失敗。轉換器程序寫入到 stderr 串流中的任何內容都會包含在錯誤訊息中。

範例

#

若要查看使用資源轉換並包含作為轉換器的自訂 Dart 套件的範例 Flutter 專案,請查看 Flutter 範例儲存庫中的 asset_transformers 專案