list method
Lists the entries directly (or, when recursive, transitively) under
path.
Implementation
@override
Future<Result<List<VfsEntry>>> list(
String path, {
bool recursive = false,
}) async {
if (_listResults.isNotEmpty) {
return _listResults.removeFirst();
}
final String normalized = normalizePath(path);
if (!_directories.contains(normalized)) {
return _notFound<List<VfsEntry>>('list', normalized);
}
final String prefix = normalized == '/' ? '/' : '$normalized/';
final List<VfsEntry> entries = <VfsEntry>[
for (final String directory in _directories)
if (directory != normalized &&
directory.startsWith(prefix) &&
(recursive || !_relative(directory, prefix).contains('/')))
VfsEntry(
path: directory,
type: VfsEntryType.directory,
size: 0,
modifiedAt: modifiedAt,
),
for (final MapEntry<String, List<int>> file in _files.entries)
if (file.key.startsWith(prefix) &&
(recursive || !_relative(file.key, prefix).contains('/')))
VfsEntry(
path: file.key,
type: VfsEntryType.file,
size: file.value.length,
modifiedAt: modifiedAt,
),
]..sort((VfsEntry left, VfsEntry right) => left.path.compareTo(right.path));
return Ok<List<VfsEntry>>(List<VfsEntry>.unmodifiable(entries));
}