tree static method

void tree(
  1. dynamic data, {
  2. String prefix = '',
  3. String? title,
})

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()));
  }
}