Browse Source

多选支持OK

master
hejl 2 months ago
parent
commit
11c414d29d
  1. 27
      win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart
  2. 2
      win_text_editor/lib/modules/template_parser/models/template_node.dart
  3. 15
      win_text_editor/lib/modules/template_parser/widgets/template_tree_view.dart

27
win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart

@ -11,6 +11,7 @@ class TemplateParserController extends BaseContentController { @@ -11,6 +11,7 @@ class TemplateParserController extends BaseContentController {
List<TemplateItem> _templateItems = [];
String? _errorMessage;
TemplateNode? _selectedNode;
String? _currentParentPath; //
// Getters
String get filePath => _filePath;
@ -40,12 +41,38 @@ class TemplateParserController extends BaseContentController { @@ -40,12 +41,38 @@ class TemplateParserController extends BaseContentController {
notifyListeners();
}
//
void toggleNodeCheck(TemplateNode node) {
final parentPath = node.path.substring(0, node.path.lastIndexOf('/'));
if (_currentParentPath != null && _currentParentPath != parentPath) {
//
clearAllChecked();
}
node.isChecked = !node.isChecked;
_currentParentPath = parentPath;
notifyListeners();
}
//
void clearAllChecked() {
void traverse(TemplateNode node) {
node.isChecked = false;
for (var child in node.children) {
traverse(child);
}
}
for (var node in _treeNodes) {
traverse(node);
}
}
Future<void> _loadTemplateData() async {
try {
_errorMessage = null;
_treeNodes = [];
_templateItems = [];
_selectedNode = null;
_currentParentPath = null; //
if (_filePath.isEmpty) return;

2
win_text_editor/lib/modules/template_parser/models/template_node.dart

@ -10,6 +10,7 @@ class TemplateNode implements TreeNode { @@ -10,6 +10,7 @@ class TemplateNode implements TreeNode {
bool isRepeated;
bool isAttribute;
int repreatCount;
bool isChecked; //
TemplateNode({
required this.name,
@ -20,6 +21,7 @@ class TemplateNode implements TreeNode { @@ -20,6 +21,7 @@ class TemplateNode implements TreeNode {
this.isRepeated = false,
this.isAttribute = false,
this.repreatCount = 1,
this.isChecked = false, //
});
@override

15
win_text_editor/lib/modules/template_parser/widgets/template_tree_view.dart

@ -57,10 +57,23 @@ class TemplateTreeView extends StatelessWidget { @@ -57,10 +57,23 @@ class TemplateTreeView extends StatelessWidget {
padding: EdgeInsets.only(left: 12.0 * node.depth),
child: ListTile(
dense: true,
leading:
leading: Row(
mainAxisSize: MainAxisSize.min,
children: [
if (templateNode.children.isEmpty) //
Checkbox(
value: templateNode.isChecked,
onChanged: (value) {
if (value != null) {
controller.toggleNodeCheck(templateNode);
}
},
),
isAttribute
? const Icon(Icons.code, size: 16, color: Colors.grey)
: const Icon(Icons.label_outline, size: 18, color: Colors.blue),
],
),
title: Text(
isAttribute ? templateNode.name.substring(1) : templateNode.name,
style: TextStyle(

Loading…
Cancel
Save