import 'dart:math'; import 'package:fis_lib_report/converts/alignment_convert.dart'; import 'package:fis_lib_report/converts/pt_to_px_converter.dart'; import 'package:fis_lib_report/pages/rt_cell.dart'; import 'package:fis_lib_report/report/cellPostion.dart'; import 'package:fis_lib_report/report/interfaces/block_element.dart'; import 'package:fis_lib_report/report/interfaces/cell.dart'; import 'package:fis_lib_report/report/interfaces/rt_table.dart'; import 'package:fis_lib_report/report/rt_Cell.dart'; import 'package:fis_lib_report/report/rt_table.dart'; import 'package:flutter/cupertino.dart'; class RTTablePage extends StatefulWidget { const RTTablePage({required this.element, Key? key}) : super(key: key); final RTTable element; @override State createState() { return _RTTableState(); } } class _RTTableState extends State { Map? _cells; List? _values = []; int? _column; int? _row; double _width = 0; @override initState() { super.initState(); _cells = widget.element.cells ?? {}; List cellPostions = _cells!.keys.toList(); cellPostions.sort(((a, b) => (b.column!).compareTo(a.column!))); // +1 为列数 _column = cellPostions.first.column! + 1; _values = _cells!.values.toList(); for (int i = 0; i < _column! - 1; i++) { _width += widget.element.columnDefinitions![i].width!; } _row = widget.element.rowDefinitions!.length + 1; } @override Widget build(BuildContext context) { List widgets = []; for (int i = 0; i < _row! - 1; i++) { final children = _cells!.keys.where((element) => element.row! == i); List childwidgets = []; children.forEach((cellPostion) { double width = widget.element.columnDefinitions![cellPostion.column!].width ?? 0.0; if (cellPostion.columnSpan! > 1) { for (int i = 1; i < cellPostion.columnSpan!; i++) { width += widget.element.columnDefinitions![cellPostion.column! + i] .width ?? 0.0; } } double height = widget.element.rowDefinitions![cellPostion.row!].height ?? 0.0; if (cellPostion.rowSpan! > 1) { for (int i = 1; i < cellPostion.rowSpan!; i++) { height += widget.element.rowDefinitions![cellPostion.row! + i].height ?? 0.0; } } final cell = _cells![cellPostion]; RTCell c = cell as RTCell; childwidgets.add( SizedBox( width: PtToPxConverter.ptToPx(width), height: PtToPxConverter.ptToPx(height), child: RTCellPage( cell: c, ), ), ); }); final row = SizedBox( child: Row( //mainAxisAlignment: MainAxisAlignment.center, children: childwidgets, ), ); widgets.add(row); } return Container( alignment: AlignmentConvert.horizontalConvert( widget.element.horizontalAlignment), child: Column( mainAxisAlignment: AlignmentConvert.horizontalToMainConvert( widget.element.horizontalAlignment), children: widgets, ), ); } }