buildTreeView function
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),
],
);
}