構建時轉換資源
如何在你的 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 專案。