8 changed files with 441 additions and 18 deletions
@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
|
||||
import 'package:flutter/material.dart'; |
||||
import 'package:syncfusion_flutter_datagrid/datagrid.dart'; |
||||
import 'package:win_text_editor/modules/data_compare/controllers/data_compare_controller.dart'; |
||||
|
||||
class DataCompareGrid extends StatelessWidget { |
||||
final DataCompareController controller; |
||||
|
||||
const DataCompareGrid({super.key, required this.controller}); |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
return Card( |
||||
shape: RoundedRectangleBorder( |
||||
borderRadius: BorderRadius.circular(2.0), // 这里可以根据需求调整圆角的大小 |
||||
), |
||||
child: SfDataGrid( |
||||
source: controller.dataSource, |
||||
columns: _buildColumns(), |
||||
stackedHeaderRows: _buildStackedHeaders(), |
||||
columnWidthMode: ColumnWidthMode.fill, |
||||
gridLinesVisibility: GridLinesVisibility.both, |
||||
headerGridLinesVisibility: GridLinesVisibility.both, |
||||
), |
||||
); |
||||
} |
||||
|
||||
List<GridColumn> _buildColumns() { |
||||
return [ |
||||
// 左表列 |
||||
GridColumn(columnName: 'left_serial', width: 60, label: _buildHeaderCell('序号')), |
||||
GridColumn(columnName: 'left_key', label: _buildHeaderCell('主键')), |
||||
...controller.leftColumns.map( |
||||
(col) => GridColumn(columnName: 'left_$col', label: _buildHeaderCell(col)), |
||||
), |
||||
// 对比列 |
||||
GridColumn( |
||||
columnName: 'comparison', |
||||
label: _buildHeaderCell('对比', color: Colors.purple[50]), |
||||
width: 80, |
||||
), |
||||
// 右表列 |
||||
GridColumn(columnName: 'right_serial', width: 60, label: _buildHeaderCell('序号')), |
||||
GridColumn(columnName: 'right_key', label: _buildHeaderCell('主键')), |
||||
...controller.rightColumns.map( |
||||
(col) => GridColumn(columnName: 'right_$col', label: _buildHeaderCell(col)), |
||||
), |
||||
]; |
||||
} |
||||
|
||||
List<StackedHeaderRow> _buildStackedHeaders() { |
||||
return [ |
||||
// 第一行表头(左表和右表分组) |
||||
StackedHeaderRow( |
||||
cells: [ |
||||
StackedHeaderCell( |
||||
columnNames: [ |
||||
'left_serial', |
||||
'left_key', |
||||
...controller.leftColumns.map((col) => 'left_$col'), |
||||
], |
||||
child: _buildGroupHeader('左表', color: Colors.green[50]), |
||||
), |
||||
// 对比列留空,将在第二行合并 |
||||
// StackedHeaderCell(columnNames: ["comparison"], child: Container()), |
||||
StackedHeaderCell( |
||||
columnNames: [ |
||||
'right_serial', |
||||
'right_key', |
||||
...controller.rightColumns.map((col) => 'right_$col'), |
||||
], |
||||
child: _buildGroupHeader('右表', color: Colors.blue[50]), |
||||
), |
||||
], |
||||
), |
||||
]; |
||||
} |
||||
|
||||
Container _buildHeaderCell(String text, {Color? color}) { |
||||
return Container( |
||||
alignment: Alignment.center, |
||||
color: color ?? Colors.grey[200], |
||||
child: Text(text, style: const TextStyle(fontWeight: FontWeight.bold)), |
||||
); |
||||
} |
||||
|
||||
Container _buildGroupHeader(String text, {Color? color}) { |
||||
return Container( |
||||
alignment: Alignment.center, |
||||
color: color ?? Colors.purple[50], |
||||
child: Text(text, style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16)), |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue