rt_table.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import 'dart:math';
  2. import 'package:fis_lib_report/converts/alignment_convert.dart';
  3. import 'package:fis_lib_report/converts/pt_to_px_converter.dart';
  4. import 'package:fis_lib_report/pages/rt_cell.dart';
  5. import 'package:fis_lib_report/report/cellPostion.dart';
  6. import 'package:fis_lib_report/report/interfaces/block_element.dart';
  7. import 'package:fis_lib_report/report/interfaces/cell.dart';
  8. import 'package:fis_lib_report/report/interfaces/rt_table.dart';
  9. import 'package:fis_lib_report/report/rt_Cell.dart';
  10. import 'package:fis_lib_report/report/rt_table.dart';
  11. import 'package:flutter/cupertino.dart';
  12. class RTTablePage extends StatefulWidget {
  13. const RTTablePage({required this.element, Key? key}) : super(key: key);
  14. final RTTable element;
  15. @override
  16. State<StatefulWidget> createState() {
  17. return _RTTableState();
  18. }
  19. }
  20. class _RTTableState extends State<RTTablePage> {
  21. Map<CellPostion, ICell>? _cells;
  22. List<ICell>? _values = [];
  23. int? _column;
  24. int? _row;
  25. double _width = 0;
  26. @override
  27. initState() {
  28. super.initState();
  29. _cells = widget.element.cells ?? {};
  30. List<CellPostion> cellPostions = _cells!.keys.toList();
  31. cellPostions.sort(((a, b) => (b.column!).compareTo(a.column!)));
  32. // +1 为列数
  33. _column = cellPostions.first.column! + 1;
  34. _values = _cells!.values.toList();
  35. for (int i = 0; i < _column! - 1; i++) {
  36. _width += widget.element.columnDefinitions![i].width!;
  37. }
  38. _row = widget.element.rowDefinitions!.length + 1;
  39. }
  40. @override
  41. Widget build(BuildContext context) {
  42. List<Widget> widgets = [];
  43. for (int i = 0; i < _row! - 1; i++) {
  44. final children = _cells!.keys.where((element) => element.row! == i);
  45. List<Widget> childwidgets = [];
  46. children.forEach((cellPostion) {
  47. double width =
  48. widget.element.columnDefinitions![cellPostion.column!].width ?? 0.0;
  49. if (cellPostion.columnSpan! > 1) {
  50. for (int i = 1; i < cellPostion.columnSpan!; i++) {
  51. width += widget.element.columnDefinitions![cellPostion.column! + i]
  52. .width ??
  53. 0.0;
  54. }
  55. }
  56. double height =
  57. widget.element.rowDefinitions![cellPostion.row!].height ?? 0.0;
  58. if (cellPostion.rowSpan! > 1) {
  59. for (int i = 1; i < cellPostion.rowSpan!; i++) {
  60. height +=
  61. widget.element.rowDefinitions![cellPostion.row! + i].height ??
  62. 0.0;
  63. }
  64. }
  65. final cell = _cells![cellPostion];
  66. RTCell c = cell as RTCell;
  67. print('width:' + width.toString() + ' height:' + height.toString());
  68. childwidgets.add(
  69. SizedBox(
  70. width: PtToPxConverter.ptToPx(width),
  71. height: PtToPxConverter.ptToPx(height),
  72. child: RTCellPage(
  73. cell: c,
  74. ),
  75. ),
  76. );
  77. });
  78. final row = SizedBox(
  79. child: Row(
  80. //mainAxisAlignment: MainAxisAlignment.center,
  81. children: childwidgets,
  82. ),
  83. );
  84. widgets.add(row);
  85. }
  86. return Container(
  87. alignment: AlignmentConvert.horizontalConvert(
  88. widget.element.horizontalAlignment),
  89. child: Column(
  90. mainAxisAlignment: AlignmentConvert.horizontalToMainConvert(
  91. widget.element.horizontalAlignment),
  92. children: widgets,
  93. ),
  94. );
  95. }
  96. }