Skip to content

Commit 99fb2d3

Browse files
author
Jonah Williams
authored
[flutter_tools] cache more directories (#112651)
1 parent 3ad1dbd commit 99fb2d3

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

packages/flutter_tools/lib/src/asset.dart

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

packages/flutter_tools/test/general.shard/asset_bundle_test.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import 'dart:convert';
66

7-
import 'package:file/file.dart';
87
import 'package:file/memory.dart';
98
import 'package:flutter_tools/src/artifacts.dart';
109
import 'package:flutter_tools/src/asset.dart';

0 commit comments

Comments
 (0)