mirror of
https://github.com/aljazceru/Auto-GPT.git
synced 2025-12-18 06:24:20 +01:00
Added SkillTreeType enum and implemented dropdown selection in SkillTreeView
- Introduced a new `SkillTreeType` enum to represent different skill tree categories: General, Coding, Data, and Scrape/Synthesize. - Extended the `SkillTreeType` enum to provide associated string values and JSON file names for each category. - Refactored the `SkillTreeViewModel` to reload the skill tree data based on the selected category. - Enhanced `SkillTreeView` by adding a positioned dropdown in the top-left corner to allow users to select and load different skill tree categories dynamically.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import 'package:auto_gpt_flutter_client/models/skill_tree/skill_tree_category.dart';
|
||||
import 'package:auto_gpt_flutter_client/models/skill_tree/skill_tree_node.dart';
|
||||
import 'package:auto_gpt_flutter_client/viewmodels/skill_tree_viewmodel.dart';
|
||||
import 'package:auto_gpt_flutter_client/views/skill_tree/tree_node_view.dart';
|
||||
@@ -24,72 +25,105 @@ class _SkillTreeViewState extends State<SkillTreeView> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return FutureBuilder<void>(
|
||||
future: initialization,
|
||||
builder: (context, snapshot) {
|
||||
widget.viewModel.graph.nodes.clear();
|
||||
widget.viewModel.graph.edges.clear();
|
||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||
return const CircularProgressIndicator();
|
||||
}
|
||||
return Stack(
|
||||
children: [
|
||||
FutureBuilder<void>(
|
||||
future: initialization,
|
||||
builder: (context, snapshot) {
|
||||
widget.viewModel.graph.nodes.clear();
|
||||
widget.viewModel.graph.edges.clear();
|
||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||
return const CircularProgressIndicator();
|
||||
}
|
||||
|
||||
if (snapshot.hasError) {
|
||||
return const Text("An error occurred");
|
||||
}
|
||||
if (snapshot.hasError) {
|
||||
return const Text("An error occurred");
|
||||
}
|
||||
|
||||
// Create Node and Edge objects for GraphView
|
||||
final Map<String, Node> nodeMap = {};
|
||||
for (var skillTreeNode in widget.viewModel.skillTreeNodes) {
|
||||
final node = Node.Id(skillTreeNode.id);
|
||||
widget.viewModel.graph.addNode(node);
|
||||
nodeMap[skillTreeNode.id] = node;
|
||||
}
|
||||
// Create Node and Edge objects for GraphView
|
||||
final Map<String, Node> nodeMap = {};
|
||||
for (var skillTreeNode in widget.viewModel.skillTreeNodes) {
|
||||
final node = Node.Id(skillTreeNode.id);
|
||||
widget.viewModel.graph.addNode(node);
|
||||
nodeMap[skillTreeNode.id] = node;
|
||||
}
|
||||
|
||||
for (var skillTreeEdge in widget.viewModel.skillTreeEdges) {
|
||||
final fromNode = nodeMap[skillTreeEdge.from];
|
||||
final toNode = nodeMap[skillTreeEdge.to];
|
||||
if (fromNode != null && toNode != null) {
|
||||
widget.viewModel.graph.addEdge(fromNode, toNode);
|
||||
}
|
||||
}
|
||||
for (var skillTreeEdge in widget.viewModel.skillTreeEdges) {
|
||||
final fromNode = nodeMap[skillTreeEdge.from];
|
||||
final toNode = nodeMap[skillTreeEdge.to];
|
||||
if (fromNode != null && toNode != null) {
|
||||
widget.viewModel.graph.addEdge(fromNode, toNode);
|
||||
}
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Expanded(
|
||||
child: InteractiveViewer(
|
||||
constrained: false,
|
||||
boundaryMargin: const EdgeInsets.all(100),
|
||||
minScale: 0.01,
|
||||
maxScale: 5.6,
|
||||
child: GraphView(
|
||||
graph: widget.viewModel.graph,
|
||||
algorithm: SugiyamaAlgorithm(widget.viewModel.builder),
|
||||
paint: Paint()
|
||||
..color = Colors.green
|
||||
..strokeWidth = 1
|
||||
..style = PaintingStyle.stroke,
|
||||
builder: (Node node) {
|
||||
String nodeId = node.key?.value as String;
|
||||
SkillTreeNode? skillTreeNode =
|
||||
widget.viewModel.getNodeById(nodeId);
|
||||
if (skillTreeNode != null) {
|
||||
return TreeNodeView(
|
||||
node: skillTreeNode,
|
||||
selected:
|
||||
nodeId == widget.viewModel.selectedNode?.id);
|
||||
} else {
|
||||
return const SizedBox(); // Return an empty widget if the node is not found
|
||||
}
|
||||
},
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Expanded(
|
||||
child: InteractiveViewer(
|
||||
constrained: false,
|
||||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width,
|
||||
height: MediaQuery.of(context).size.height,
|
||||
child: Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: GraphView(
|
||||
graph: widget.viewModel.graph,
|
||||
algorithm:
|
||||
SugiyamaAlgorithm(widget.viewModel.builder),
|
||||
paint: Paint()
|
||||
..color = Colors.green
|
||||
..strokeWidth = 1
|
||||
..style = PaintingStyle.stroke,
|
||||
builder: (Node node) {
|
||||
String nodeId = node.key?.value as String;
|
||||
SkillTreeNode? skillTreeNode =
|
||||
widget.viewModel.getNodeById(nodeId);
|
||||
if (skillTreeNode != null) {
|
||||
return TreeNodeView(
|
||||
node: skillTreeNode,
|
||||
selected: nodeId ==
|
||||
widget.viewModel.selectedNode?.id);
|
||||
} else {
|
||||
return const SizedBox(); // Return an empty widget if the node is not found
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
Positioned(
|
||||
top: 10,
|
||||
left: 10,
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
child: DropdownButton<SkillTreeCategory>(
|
||||
value: widget.viewModel.currentSkillTreeType,
|
||||
items: SkillTreeCategory.values.map((category) {
|
||||
return DropdownMenuItem<SkillTreeCategory>(
|
||||
value: category,
|
||||
child: Text(category.stringValue),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (newValue) {
|
||||
if (newValue != null) {
|
||||
setState(() {
|
||||
widget.viewModel.currentSkillTreeType = newValue;
|
||||
widget.viewModel.initializeSkillTree();
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user