fromFiles static method
Draws a tree for the given list of files
Shows each file with the file size if showFileSizes
is true
.
This will stats each file in the list for finding the size.
Given files like:
TODO
example/console_example.dart
example/main.dart
example/web copy/web_example.dart
test/absolute_test.dart
test/basename_test.dart
test/normalize_test.dart
test/relative_test.dart
test/split_test.dart
.gitignore
README.md
lib/path.dart
pubspec.yaml
test/all_test.dart
test/path_posix_test.dart
test/path_windows_test.dart
this renders:
|-- .gitignore (1 KB)
|-- README.md (23 KB)
|-- TODO (1 MB)
|-- example
| |-- console_example.dart (20 B)
| |-- main.dart (200 B)
| '-- web copy
| '-- web_example.dart (3 KB)
|-- lib
| '-- path.dart (4 KB)
|-- pubspec.yaml (10 KB)
'-- test
|-- absolute_test.dart (102 KB)
|-- all_test.dart (100 KB)
|-- basename_test.dart (4 KB)
|-- path_windows_test.dart (2 KB)
|-- relative_test.dart (10 KB)
'-- split_test.dart (50 KB)
If baseDir
is passed, it will be used as the root of the tree.
Implementation
static String fromFiles(
List<String> files, {
String? baseDir,
required bool showFileSizes,
}) {
// Parse out the files into a tree of nested maps.
final root = <String, Map>{};
for (var file in files) {
final relativeFile =
baseDir == null ? file : p.relative(file, from: baseDir);
final parts = p.split(relativeFile);
if (showFileSizes) {
final stat = File(p.normalize(file)).statSync();
if (stat.type != FileSystemEntityType.directory) {
final size = stat.size;
final sizeString = _readableFileSize(size);
parts.last = '${parts.last} $sizeString';
}
}
var directory = root;
for (var part in parts) {
directory = directory.putIfAbsent(part, () => <String, Map>{})
as Map<String, Map>;
}
}
// Walk the map recursively and render to a string.
return fromMap(root, startingAtTop: false);
}