移除 AssetManifest.json
已建置的 Flutter 應用程式將不再包含 AssetManifest.json 資源檔案。
摘要
#
Flutter 應用程式會包含一個名為 AssetManifest.json 的資源檔案。
這個檔案實際上包含了一份資源清單。
應用程式程式碼可以使用 AssetBundle
API 來讀取它,
以便在執行時判斷有哪些資源可用。
AssetManifest.json 檔案是一個未公開記載的實作細節。
目前框架已不再使用它,並計劃在未來的 Flutter 版本中
不再產生此檔案。
如果您的應用程式程式碼需要取得可用資源的清單,
請改用 AssetManifest
API。
遷移指南
#從 Flutter 應用程式程式碼讀取資源清單
#變更前:
import 'dart:convert';
import 'package:flutter/services.dart';
void readAssetList() async {
final assetManifestContent = await rootBundle.loadString('AssetManifest.json');
final decodedAssetManifest =
json.decode(assetManifestContent) as Map<String, Object?>;
final assets = decodedAssetManifest.keys.toList().cast<String>();
}
變更後:
import 'package:flutter/services.dart';
void readAssetList() async {
final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
final assets = assetManifest.listAssets();
}
從 Flutter 應用程式外部的 Dart 程式碼讀取資源清單
#
flutter 命令列介面 (Command Line Interface) 工具會產生一個新檔案 AssetManifest.bin。
這個檔案取代了 AssetManifest.json。
該檔案包含與 AssetManifest.json 相同的資訊,但格式不同。
如果你需要從不是 Flutter 應用程式的程式碼中讀取這個檔案,
因此無法使用 AssetManifest
API,
你仍然可以自行解析這個檔案。
你可以使用 standard_message_codec
套件來解析其內容。
import 'dart:io';
import 'dart:typed_data';
import 'package:standard_message_codec/standard_message_codec.dart';
void main() {
// The path to AssetManifest.bin depends on the target platform.
final pathToAssetManifest = './build/web/assets/AssetManifest.bin';
final manifest = File(pathToAssetManifest).readAsBytesSync();
final decoded = const StandardMessageCodec()
.decodeMessage(ByteData.sublistView(manifest));
final assets = decoded.keys.cast<String>().toList();
}
請注意,AssetManifest.bin 是 Flutter 的實作細節。
讀取此檔案並不是官方支援的工作流程。
該檔案的內容或格式在未來的 Flutter 版本中可能會變更,且不會另行公告。
時程
#
自 Flutter 3.19 之後的第四個穩定版發行起,或自 3.19 發行後滿一年(以較晚者為準),
將不再產生 AssetManifest.json。
參考資料
#相關議題:
-
當建置 Flutter 應用程式時,flutter 工具會產生一個
AssetManifest.json檔案,但該檔案並未被框架使用 (Issue #143577)
相關 PR:
Unless stated otherwise, the documentation on this site reflects Flutter 3.44.0. Page last updated on 2026-06-14. View source or report an issue.