你可以配置你的專案,使其在構建時自動使用相容的 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 專案