|
|
|
@ -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 |
|
|
|
|