buildTreeView function

Widget buildTreeView({
  1. required String id,
  2. required Map<String, dynamic> props,
})

Implementation

Widget buildTreeView({
  required String id,
  required Map<String, dynamic> props,
}) {
  final items = mapsOf(props['items']).isNotEmpty ? mapsOf(props['items']) : mapsOf(props['rows']);
  final title = props['title']?.toString();
  List<Widget> walk(List<Map<dynamic, dynamic>> nodes, int level) {
    final out = <Widget>[];
    for (final node in nodes) {
      final label = node['title']?.toString() ?? node['label']?.toString() ?? node['id']?.toString() ?? '';
      out.add(Padding(
        padding: EdgeInsets.only(left: 16.0 * level),
        child: Text(label),
      ));
      final children = mapsOf(node['children']);
      if (children.isNotEmpty) {
        out.addAll(walk(children, level + 1));
      }
    }
    return out;
  }

  return Column(
    key: ValueKey(id),
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      if (title != null && title.isNotEmpty) Text(title),
      ...walk(items, 0),
    ],
  );
}