tree static method
show the data as tree structure ┌─ TITLE ─ │ ├─ key (value is a map) │ │ ├─ map child 0 : 00000000 │ │ ├─ map child 1 : 00000000 │ │ ├─ map child 2 : 00000000 │ │ ├─ map child 3 : 00000000 │ │ └─ key (value is a list) │ │ │ ├─ value 0 │ │ │ └─ value 1 │ └─ map child 4 : 00000000 └─────────────────────────────────
Implementation
static void tree(dynamic data, {String prefix = '', String? title}) {
if (title != null) {
print('$prefix┌─ $title ─');
prefix += "│ ".inRed; // Add spacing for nested items under the title
}
if (data is Map) {
var keys = data.keys.toList();
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var isLast = i == keys.length - 1;
var value = data[key];
print(
prefix + (isLast ? "╰─→ " : "╰╮→ ").inRed + inGray(key.toString()));
tree(value, prefix: isLast ? prefix + " " : prefix + "│ ");
}
} else if (data is Iterable) {
var items = data.toList();
for (var i = 0; i < items.length; i++) {
var isLast = i == items.length - 1;
tree(items[i], prefix: isLast ? prefix + " " : prefix + "├→ ");
}
} else if (data is String) {
print(prefix + inGreen(data));
} else if (data is int) {
print(prefix + inYellow(data.toString()));
} else if (data is double) {
print(prefix + inYellow(data.toString()));
} else if (data is bool) {
print(prefix + inCyan(data.toString()));
} else if (data is Cell) {
tree(data.get(), prefix: prefix);
} else {
print(prefix.inRed + inYellow(data.toString()));
}
}