Saltar al contenido principal

Eliminación de AssetManifest.json

Las aplicaciones construidas de Flutter ya no incluirán un archivo de recursos AssetManifest.json.

Resumen

#

Las aplicaciones de Flutter incluían un archivo de recursos llamado AssetManifest.json. Este archivo contiene de manera efectiva una lista de recursos. El código de la aplicación puede leerlo utilizando la API AssetBundle para determinar qué recursos están disponibles en tiempo de ejecución.

El archivo AssetManifest.json es un detalle de implementación no documentado. Ya no lo utiliza el framework y está previsto dejar de generarlo en una futura versión de Flutter. Si el código de tu aplicación necesita obtener una lista de los recursos disponibles, utiliza la API AssetManifest en su lugar.

Guía de migración

#

Lectura del manifiesto de recursos desde el código de la aplicación de Flutter

#

Antes:

dart
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>();
}

Después:

dart
import 'package:flutter/services.dart';

void readAssetList() async {
  final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
  final assets = assetManifest.listAssets();
}

Lectura de la información del manifiesto de recursos desde código de Dart fuera de una aplicación de Flutter

#

La herramienta de CLI de flutter genera un nuevo archivo, AssetManifest.bin. Este reemplaza a AssetManifest.json. Este archivo contiene la misma información que AssetManifest.json, pero en un formato diferente. Si necesitas leer este archivo desde código que no forma parte de una aplicación de Flutter y, por lo tanto, no puedes usar la API AssetManifest, aún puedes analizar el archivo por tu cuenta.

El paquete standard_message_codec se puede utilizar para analizar el contenido.

dart
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();
}

Ten en cuenta que AssetManifest.bin es un detalle de implementación de Flutter. Leer este archivo no es un flujo de trabajo oficialmente compatible. El contenido o el formato del archivo podrían cambiar en una futura versión de Flutter sin previo aviso.

Timeline

#

AssetManifest.json ya no se generará a partir del cuarto lanzamiento estable después de 3.19 o un año después del lanzamiento de 3.19, lo que ocurra más tarde.

Referencias

#

Issues relevantes:

  • Al compilar una aplicación de Flutter, la herramienta flutter genera un archivo AssetManifest.json que no es utilizado por el framework (Issue #143577)

PR relevante: