registerShaderBundleDataAsset function

ShaderBundleBuildResult? registerShaderBundleDataAsset({
  1. required BuildInput buildInput,
  2. required BuildOutputBuilder buildOutput,
  3. required Uri outputBundleFile,
  4. required String legacyAssetKey,
  5. required ShaderBundleAssetMode assetMode,
  6. String? dataAssetName,
})

Registers outputBundleFile as a DataAsset when assetMode allows it.

Returns the emitted asset metadata, or null when assetMode falls back to legacy output because data assets are not available.

Implementation

ShaderBundleBuildResult? registerShaderBundleDataAsset({
  required BuildInput buildInput,
  required BuildOutputBuilder buildOutput,
  required Uri outputBundleFile,
  required String legacyAssetKey,
  required ShaderBundleAssetMode assetMode,
  String? dataAssetName,
}) {
  if (assetMode == ShaderBundleAssetMode.legacyOnly) {
    return null;
  }
  final dataAssetsAvailable = buildInput.config.buildDataAssets;
  if (!dataAssetsAvailable) {
    if (assetMode == ShaderBundleAssetMode.dataAssetsRequired) {
      _throwDataAssetsUnavailable(legacyAssetKey);
    }
    return null;
  }

  final name =
      dataAssetName ??
      shaderBundleDataAssetName(legacyAssetKey.split('/').last);
  final asset = DataAsset(
    package: buildInput.packageName,
    name: name,
    file: outputBundleFile,
  );
  buildOutput.assets.data.add(asset);
  return ShaderBundleBuildResult(
    outputFile: outputBundleFile,
    legacyAssetKey: legacyAssetKey,
    dataAssetName: name,
    dataAssetId: asset.id,
    flutterAssetKey: flutterDataAssetKey(
      package: buildInput.packageName,
      name: name,
    ),
  );
}