@@ -1019,6 +1019,7 @@ class _AssetDirectoryCache {
10191019
10201020 final FileSystem _fileSystem;
10211021 final Map <String , List <String >> _cache = < String , List <String >> {};
1022+ final Map <String , List <File >> _variantsPerFolder = < String , List <File >> {};
10221023
10231024 List <String > variantsFor (String assetPath) {
10241025 final String directory = _fileSystem.path.dirname (assetPath);
@@ -1030,25 +1031,26 @@ class _AssetDirectoryCache {
10301031 if (_cache.containsKey (assetPath)) {
10311032 return _cache[assetPath]! ;
10321033 }
1033-
1034- final List <FileSystemEntity > entitiesInDirectory = _fileSystem.directory (directory).listSync ();
1035-
1034+ if (! _variantsPerFolder.containsKey (directory)) {
1035+ _variantsPerFolder[directory] = _fileSystem.directory (directory)
1036+ .listSync ()
1037+ .whereType <Directory >()
1038+ .where ((Directory dir) => _assetVariantDirectoryRegExp.hasMatch (dir.basename))
1039+ .expand ((Directory dir) => dir.listSync ())
1040+ .whereType <File >()
1041+ .toList ();
1042+ }
10361043 final File assetFile = _fileSystem.file (assetPath);
1037- final List <String > pathsOfVariants = < String > [
1044+ final List <File > potentialVariants = _variantsPerFolder[directory]! ;
1045+ final String basename = assetFile.basename;
1046+ return _cache[assetPath] = < String > [
10381047 // It's possible that the user specifies only explicit variants (e.g. .../1x/asset.png),
10391048 // so there does not necessarily need to be a file at the given path.
10401049 if (assetFile.existsSync ())
10411050 assetPath,
1042- ...entitiesInDirectory
1043- .whereType <Directory >()
1044- .where ((Directory dir) => _assetVariantDirectoryRegExp.hasMatch (dir.basename))
1045- .expand ((Directory dir) => dir.listSync ())
1046- .whereType <File >()
1047- .where ((File file) => file.basename == assetFile.basename)
1051+ ...potentialVariants
1052+ .where ((File file) => file.basename == basename)
10481053 .map ((File file) => file.path),
10491054 ];
1050-
1051- _cache[assetPath] = pathsOfVariants;
1052- return pathsOfVariants;
10531055 }
10541056}
0 commit comments