class TreeView extends StatefulWidget {
@override _TreeView createState() => _TreeView();
}
class _TreeView extends State<TreeView> {
@override Widget build(BuildContext context) {
List<TreeItem> Items =
List<TreeItem>(); // ignore: non_constant_identifier_names
TreeItem item = TreeItem("Item1");
item.AddChildren(TreeItem("Item1.1"));
Items.add(item);
Items.add(TreeItem("Item2"));
Items.add(TreeItem("Item3"));
return ListView.builder(
padding:
EdgeInsets.zero,
itemBuilder: (context, index) {
TreeItem item = Items[index];
return Padding(
padding: EdgeInsets.only(left: item.level * 17.0),
child: Visibility(
child: ListTile(
title: Text(item.Header),
onTap: () {
setState(() {
item.children.forEach((element) {
element.IsVisible = true;
});
});
},
),
visible: item.IsVisible,
),
);
},
itemCount: Items.length,
);
}
}
class TreeItem {
final String Header; // ignore: non_constant_identifier_names
int level = 0;
bool IsVisible = true; // ignore: non_constant_identifier_names
List<TreeItem> children = List<TreeItem>();
TreeItem(this.Header);
// ignore: non_constant_identifier_names
void AddChildren(TreeItem item) {
item.level = level + 1;
item.IsVisible = false;
children.add(item);
}
}