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

Loading…
Cancel
Save