@@ -63,9 +63,17 @@ abstract class AssetBundleFactory {
6363 AssetBundle createBundle ();
6464}
6565
66+ enum AssetKind {
67+ regular,
68+ font,
69+ shader,
70+ }
71+
6672abstract class AssetBundle {
6773 Map <String , DevFSContent > get entries;
6874
75+ Map <String , AssetKind > get entryKinds;
76+
6977 /// The files that were specified under the deferred components assets sections
7078 /// in pubspec.
7179 Map <String , Map <String , DevFSContent >> get deferredComponentsEntries;
@@ -135,6 +143,9 @@ class ManifestAssetBundle implements AssetBundle {
135143 @override
136144 final Map <String , DevFSContent > entries = < String , DevFSContent > {};
137145
146+ @override
147+ final Map <String , AssetKind > entryKinds = < String , AssetKind > {};
148+
138149 @override
139150 final Map <String , Map <String , DevFSContent >> deferredComponentsEntries = < String , Map <String , DevFSContent >> {};
140151
@@ -218,6 +229,7 @@ class ManifestAssetBundle implements AssetBundle {
218229 _lastBuildTimestamp = DateTime .now ();
219230 if (flutterManifest.isEmpty) {
220231 entries[_kAssetManifestJson] = DevFSStringContent ('{}' );
232+ entryKinds[_kAssetManifestJson] = AssetKind .regular;
221233 return 0 ;
222234 }
223235
@@ -370,6 +382,7 @@ class ManifestAssetBundle implements AssetBundle {
370382 inputFiles.add (variantFile);
371383 assert (variantFile.existsSync ());
372384 entries[variant.entryUri.path] ?? = DevFSFileContent (variantFile);
385+ entryKinds[variant.entryUri.path] ?? = variant.assetKind;
373386 }
374387 }
375388 // Save the contents of each deferred component image, image variant, and font
@@ -418,6 +431,7 @@ class ManifestAssetBundle implements AssetBundle {
418431 final File assetFile = asset.lookupAssetFile (_fileSystem);
419432 assert (assetFile.existsSync (), 'Missing ${assetFile .path }' );
420433 entries[asset.entryUri.path] ?? = DevFSFileContent (assetFile);
434+ entryKinds[asset.entryUri.path] ?? = asset.assetKind;
421435 }
422436
423437 // Update wildcard directories we can detect changes in them.
@@ -449,23 +463,25 @@ class ManifestAssetBundle implements AssetBundle {
449463 _fileSystem.file ('DOES_NOT_EXIST_RERUN_FOR_WILDCARD$suffix ' ).absolute);
450464 }
451465
452- _setIfChanged (_kAssetManifestJson, assetManifest);
453- _setIfChanged (kFontManifestJson, fontManifest);
466+ _setIfChanged (_kAssetManifestJson, assetManifest, AssetKind .regular );
467+ _setIfChanged (kFontManifestJson, fontManifest, AssetKind .regular );
454468 _setLicenseIfChanged (licenseResult.combinedLicenses, targetPlatform);
455469 return 0 ;
456470 }
457471
458472 @override
459473 List <File > additionalDependencies = < File > [];
460474
461- void _setIfChanged (String key, DevFSStringContent content) {
475+ void _setIfChanged (String key, DevFSStringContent content, AssetKind assetKind ) {
462476 if (! entries.containsKey (key)) {
463477 entries[key] = content;
478+ entryKinds[key] = assetKind;
464479 return ;
465480 }
466481 final DevFSStringContent ? oldContent = entries[key] as DevFSStringContent ? ;
467482 if (oldContent? .string != content.string) {
468483 entries[key] = content;
484+ entryKinds[key] = assetKind;
469485 }
470486 }
471487
@@ -477,7 +493,7 @@ class ManifestAssetBundle implements AssetBundle {
477493 // dart:io to decompress it. So use the standard _setIfChanged to check if
478494 // the strings still match.
479495 if (targetPlatform == TargetPlatform .web_javascript) {
480- _setIfChanged (_kNoticeFile, DevFSStringContent (combinedLicenses));
496+ _setIfChanged (_kNoticeFile, DevFSStringContent (combinedLicenses), AssetKind .regular );
481497 return ;
482498 }
483499
@@ -495,6 +511,7 @@ class ManifestAssetBundle implements AssetBundle {
495511 // common English words with domain specific words like copyright.
496512 hintString: 'copyrightsoftwaretothisinandorofthe' ,
497513 );
514+ entryKinds[_kNoticeZippedFile] = AssetKind .regular;
498515 }
499516 }
500517
@@ -519,6 +536,7 @@ class ManifestAssetBundle implements AssetBundle {
519536 relativeUri: Uri (path: entryUri.pathSegments.last),
520537 entryUri: entryUri,
521538 package: null ,
539+ assetKind: AssetKind .font,
522540 ));
523541 }
524542 }
@@ -546,6 +564,7 @@ class ManifestAssetBundle implements AssetBundle {
546564 relativeUri: Uri (path: entryUri.pathSegments.last),
547565 entryUri: entryUri,
548566 package: null ,
567+ assetKind: AssetKind .shader,
549568 ));
550569 }
551570
@@ -745,6 +764,21 @@ class ManifestAssetBundle implements AssetBundle {
745764 }
746765 }
747766
767+ for (final Uri shaderUri in flutterManifest.shaders) {
768+ _parseAssetFromFile (
769+ packageConfig,
770+ flutterManifest,
771+ assetBase,
772+ cache,
773+ result,
774+ shaderUri,
775+ excludeDirs: excludeDirs,
776+ packageName: packageName,
777+ attributedPackage: attributedPackage,
778+ assetKind: AssetKind .shader,
779+ );
780+ }
781+
748782 // Add assets referenced in the fonts section of the manifest.
749783 for (final Font font in flutterManifest.fonts) {
750784 for (final FontAsset fontAsset in font.fontAssets) {
@@ -754,6 +788,7 @@ class ManifestAssetBundle implements AssetBundle {
754788 fontAsset.assetUri,
755789 packageName,
756790 attributedPackage,
791+ assetKind: AssetKind .font,
757792 );
758793 final File baseAssetFile = baseAsset.lookupAssetFile (_fileSystem);
759794 if (! baseAssetFile.existsSync ()) {
@@ -816,13 +851,15 @@ class ManifestAssetBundle implements AssetBundle {
816851 List <String > excludeDirs = const < String > [],
817852 String ? packageName,
818853 Package ? attributedPackage,
854+ AssetKind assetKind = AssetKind .regular,
819855 }) {
820856 final _Asset asset = _resolveAsset (
821857 packageConfig,
822858 assetBase,
823859 assetUri,
824860 packageName,
825861 attributedPackage,
862+ assetKind: assetKind,
826863 );
827864 final List <_Asset > variants = < _Asset > [];
828865 final File assetFile = asset.lookupAssetFile (_fileSystem);
@@ -839,6 +876,7 @@ class ManifestAssetBundle implements AssetBundle {
839876 entryUri: entryUri,
840877 relativeUri: relativeUri,
841878 package: attributedPackage,
879+ assetKind: assetKind,
842880 ),
843881 );
844882 }
@@ -852,8 +890,9 @@ class ManifestAssetBundle implements AssetBundle {
852890 String assetsBaseDir,
853891 Uri assetUri,
854892 String ? packageName,
855- Package ? attributedPackage,
856- ) {
893+ Package ? attributedPackage, {
894+ AssetKind assetKind = AssetKind .regular,
895+ }) {
857896 final String assetPath = _fileSystem.path.fromUri (assetUri);
858897 if (assetUri.pathSegments.first == 'packages'
859898 && ! _fileSystem.isFileSync (_fileSystem.path.join (assetsBaseDir, assetPath))) {
@@ -863,6 +902,7 @@ class ManifestAssetBundle implements AssetBundle {
863902 assetUri,
864903 packageConfig,
865904 attributedPackage,
905+ assetKind: assetKind,
866906 );
867907 if (packageAsset != null ) {
868908 return packageAsset;
@@ -876,10 +916,16 @@ class ManifestAssetBundle implements AssetBundle {
876916 : Uri (pathSegments: < String > ['packages' , packageName, ...assetUri.pathSegments]), // Asset from, and declared in $packageName.
877917 relativeUri: assetUri,
878918 package: attributedPackage,
919+ assetKind: assetKind,
879920 );
880921 }
881922
882- _Asset ? _resolvePackageAsset (Uri assetUri, PackageConfig packageConfig, Package ? attributedPackage) {
923+ _Asset ? _resolvePackageAsset (
924+ Uri assetUri,
925+ PackageConfig packageConfig,
926+ Package ? attributedPackage, {
927+ AssetKind assetKind = AssetKind .regular,
928+ }) {
883929 assert (assetUri.pathSegments.first == 'packages' );
884930 if (assetUri.pathSegments.length > 1 ) {
885931 final String packageName = assetUri.pathSegments[1 ];
@@ -891,6 +937,7 @@ class ManifestAssetBundle implements AssetBundle {
891937 entryUri: assetUri,
892938 relativeUri: Uri (pathSegments: assetUri.pathSegments.sublist (2 )),
893939 package: attributedPackage,
940+ assetKind: assetKind,
894941 );
895942 }
896943 }
@@ -910,6 +957,7 @@ class _Asset {
910957 required this .relativeUri,
911958 required this .entryUri,
912959 required this .package,
960+ this .assetKind = AssetKind .regular,
913961 });
914962
915963 final String baseDir;
@@ -923,6 +971,8 @@ class _Asset {
923971 /// A platform-independent URL representing the entry for the asset manifest.
924972 final Uri entryUri;
925973
974+ final AssetKind assetKind;
975+
926976 File lookupAssetFile (FileSystem fileSystem) {
927977 return fileSystem.file (fileSystem.path.join (baseDir, fileSystem.path.fromUri (relativeUri)));
928978 }
@@ -951,7 +1001,8 @@ class _Asset {
9511001 return other is _Asset
9521002 && other.baseDir == baseDir
9531003 && other.relativeUri == relativeUri
954- && other.entryUri == entryUri;
1004+ && other.entryUri == entryUri
1005+ && other.assetKind == assetKind;
9551006 }
9561007
9571008 @override
0 commit comments