load static method

Future<SceneRegistry> load({
  1. AssetBundle? bundle,
  2. Iterable<String>? assetKeys,
})

Loads the registry by scanning the asset manifest for .fsceneb data assets, then the generated tree's manifest for everything else.

Implementation

static Future<SceneRegistry> load({
  AssetBundle? bundle,
  Iterable<String>? assetKeys,
}) async {
  final assetBundle = bundle ?? rootBundle;
  final keys = assetKeys ?? await _loadAssetManifestKeys(assetBundle);
  final entries = keys
      .map(SceneEntry.tryParse)
      .whereType<SceneEntry>()
      .toList();
  if (assetKeys == null) {
    final generated = await loadGeneratedAssetIndex(bundle);
    for (final match in generated.entriesOf(GeneratedAssetFamily.scene)) {
      // A data asset wins over a tree entry for the same scene, so a project
      // switching modes without a clean asset bundle still resolves once.
      if (entries.any(
        (entry) =>
            entry.sceneId == match.entry.id &&
            entry.package == match.entry.owner,
      )) {
        continue;
      }
      entries.add(
        SceneEntry(
          assetKey: match.key,
          package: match.entry.owner,
          sceneId: match.entry.id,
        ),
      );
    }
  }
  entries.sort((a, b) => a.assetKey.compareTo(b.assetKey));
  return SceneRegistry._(entries);
}