load static method
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);
}