Browse Source

列扩展OK

master
hejl 2 months ago
parent
commit
cf433e9540
  1. 20
      win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart
  2. 56
      win_text_editor/lib/modules/template_parser/widgets/template_grid_view.dart

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

@ -210,4 +210,24 @@ class TemplateParserController extends BaseContentController { @@ -210,4 +210,24 @@ class TemplateParserController extends BaseContentController {
void onOpenFolder(String folderPath) {
// TODO: implement onOpenFolder
}
//
List<TemplateNode> getSelectedNodes() {
List<TemplateNode> selectedNodes = [];
void traverse(TemplateNode node) {
if (node.isChecked) {
selectedNodes.add(node);
}
for (var child in node.children) {
traverse(child);
}
}
for (var node in _treeNodes) {
traverse(node);
}
return selectedNodes;
}
}

56
win_text_editor/lib/modules/template_parser/widgets/template_grid_view.dart

@ -61,14 +61,25 @@ class TemplateGridView extends StatelessWidget { @@ -61,14 +61,25 @@ class TemplateGridView extends StatelessWidget {
}
Future<void> _exportToCsv(TemplateParserController controller) async {
String csvData = '序号\t内容\n';
String csvData = '序号\t';
final selectedNodes = controller.getSelectedNodes();
for (var node in selectedNodes) {
csvData += '${node.name}\t';
}
csvData += '\n';
final filteredItems =
controller.selectedNode != null
? controller.templateItems.where((item) => item.matchesPath(controller.selectedNode!.path)).toList()
: controller.templateItems;
for (var item in filteredItems) {
csvData += '${filteredItems.indexOf(item) + 1}\t${item.value}\n';
csvData += '${filteredItems.indexOf(item) + 1}\t';
for (var node in selectedNodes) {
//
csvData += '\t';
}
csvData += '\n';
}
final filePath = await FilePicker.platform.saveFile(
@ -90,14 +101,14 @@ class TemplateGridView extends StatelessWidget { @@ -90,14 +101,14 @@ class TemplateGridView extends StatelessWidget {
? items.where((item) => item.matchesPath(controller.selectedNode!.path)).toList()
: items;
final selectedNodes = controller.getSelectedNodes();
final dataSource = _TemplateItemDataSource(
items: filteredItems,
selectedNode: controller.selectedNode,
selectedNodes: selectedNodes,
);
return SfDataGrid(
source: dataSource,
columns: [
List<GridColumn> columns = [
GridColumn(
columnName: 'index',
width: 60,
@ -108,16 +119,25 @@ class TemplateGridView extends StatelessWidget { @@ -108,16 +119,25 @@ class TemplateGridView extends StatelessWidget {
child: const Text('序号'),
),
),
];
for (var node in selectedNodes) {
columns.add(
GridColumn(
columnName: 'content',
columnName: node.id.toString(),
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.center,
color: Colors.grey[200],
child: const Text('内容'),
child: Text(node.name),
),
),
],
);
}
return SfDataGrid(
source: dataSource,
columns: columns,
gridLinesVisibility: GridLinesVisibility.both,
headerGridLinesVisibility: GridLinesVisibility.both,
columnWidthMode: ColumnWidthMode.fill,
@ -127,19 +147,23 @@ class TemplateGridView extends StatelessWidget { @@ -127,19 +147,23 @@ class TemplateGridView extends StatelessWidget {
class _TemplateItemDataSource extends DataGridSource {
final List<TemplateItem> items;
final TemplateNode? selectedNode;
final List<TemplateNode> selectedNodes;
_TemplateItemDataSource({required this.items, required this.selectedNode});
_TemplateItemDataSource({required this.items, required this.selectedNodes});
@override
List<DataGridRow> get rows =>
items.map((item) {
return DataGridRow(
cells: [
List<DataGridCell> cells = [
DataGridCell<int>(columnName: 'index', value: items.indexOf(item) + 1),
DataGridCell<String>(columnName: 'content', value: item.value),
],
);
];
for (var node in selectedNodes) {
//
cells.add(DataGridCell<String>(columnName: node.id.toString(), value: ''));
}
return DataGridRow(cells: cells);
}).toList();
@override

Loading…
Cancel
Save