123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- import 'dart:math';
- import 'package:fis_lib_report/converts/alignment_convert.dart';
- import 'package:fis_lib_report/converts/color_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_border.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<StatefulWidget> createState() {
- return _RTTableState();
- }
- }
- class _RTTableState extends State<RTTablePage> {
- Map<CellPostion, ICell>? _cells;
- List<ICell>? _values = [];
- int? _column;
- int? _row;
- double _width = 0;
- @override
- initState() {
- super.initState();
- }
- @override
- Widget build(BuildContext context) {
- initCells();
- List<Widget> widgets = [];
- for (int i = 0; i < _row! - 1; i++) {
- final children = _cells!.keys.where((element) => element.row! == i);
- List<Widget> childwidgets = [];
- for (var cellPostion in children) {
- 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 - 1].height ??
- 0.0;
- }
- }
- final cell = _cells![cellPostion];
- RTCell c = cell as RTCell;
- final borders = c.borders!;
- final background = c.background;
- childwidgets.add(
- Container(
- decoration: BoxDecoration(
- color: ColorConvert.colorConvert(background),
- border: Border(
- left: BorderSide(
- style: borders.left.borderStyle == RTBorderStyle.None
- ? BorderStyle.none
- : BorderStyle.solid,
- width: borders.left.thickness,
- color: ColorConvert.colorConvert(borders.left.color)),
- right: BorderSide(
- style: borders.right.borderStyle == RTBorderStyle.None
- ? BorderStyle.none
- : BorderStyle.solid,
- width: borders.right.thickness,
- color: ColorConvert.colorConvert(borders.right.color)),
- top: BorderSide(
- style: borders.top.borderStyle == RTBorderStyle.None
- ? BorderStyle.none
- : BorderStyle.solid,
- width: borders.top.thickness,
- color: ColorConvert.colorConvert(borders.top.color)),
- bottom: BorderSide(
- style: borders.bottom.borderStyle == RTBorderStyle.None
- ? BorderStyle.none
- : BorderStyle.solid,
- width: borders.bottom.thickness,
- color: ColorConvert.colorConvert(borders.bottom.color)),
- ),
- ),
- width: PtToPxConverter.ptToPx(width),
- height: PtToPxConverter.ptToPx(height),
- child: RTCellPage(
- cell: c,
- ),
- ),
- );
- }
- final row = SizedBox(
- child: Row(
- children: childwidgets,
- ),
- );
- widgets.add(row);
- }
- return Container(
- alignment: AlignmentConvert.horizontalConvert(
- widget.element.horizontalAlignment),
- child: Column(
- mainAxisAlignment: AlignmentConvert.horizontalToMainConvert(
- widget.element.horizontalAlignment),
- children: widgets,
- ),
- );
- }
- void initCells() {
- _cells = widget.element.cells ?? {};
- List<CellPostion> 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;
- }
- }
|