paragraph_page.dart 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. import 'package:fis_lib_report/converts/alignment_convert.dart';
  2. import 'package:fis_lib_report/pages/components/datetime.dart';
  3. import 'package:fis_lib_report/pages/components/input_image.dart';
  4. import 'package:fis_lib_report/pages/components/input_imageList.dart';
  5. import 'package:fis_lib_report/pages/components/input_text.dart';
  6. import 'package:fis_lib_report/pages/components/line.dart';
  7. import 'package:fis_lib_report/pages/components/multi_select.dart';
  8. import 'package:fis_lib_report/pages/components/multi_selected.dart';
  9. import 'package:fis_lib_report/pages/components/page_number.dart';
  10. import 'package:fis_lib_report/pages/components/single_select.dart';
  11. import 'package:fis_lib_report/pages/components/space.dart';
  12. import 'package:fis_lib_report/pages/components/static_Text.dart';
  13. import 'package:fis_lib_report/pages/components/static_image.dart';
  14. import 'package:fis_lib_report/pages/helpler.dart';
  15. import 'package:fis_lib_report/report/dateTimeElement.dart';
  16. import 'package:fis_lib_report/report/element_type.dart';
  17. import 'package:fis_lib_report/report/inputImage.dart';
  18. import 'package:fis_lib_report/report/inputText.dart';
  19. import 'package:fis_lib_report/report/interfaces/element.dart';
  20. import 'package:fis_lib_report/report/interfaces/position_layout.dart';
  21. import 'package:fis_lib_report/report/line.dart';
  22. import 'package:fis_lib_report/report/multiSelected.dart';
  23. import 'package:fis_lib_report/report/page_number.dart';
  24. import 'package:fis_lib_report/report/paragraph.dart';
  25. import 'package:fis_lib_report/report/rt_Cell.dart';
  26. import 'package:fis_lib_report/report/rt_table.dart';
  27. import 'package:fis_lib_report/report/singleSelected.dart';
  28. import 'package:fis_lib_report/report/space.dart';
  29. import 'package:fis_lib_report/report/static_text.dart';
  30. import 'package:fis_lib_report/report/static_image.dart';
  31. import 'package:fis_lib_report/report_info/report_info.dart';
  32. import 'package:flutter/material.dart';
  33. class ParagraphPage extends StatefulWidget {
  34. final Paragraph paragraph;
  35. ParagraphPage({Key? key, required this.paragraph}) : super(key: key);
  36. @override
  37. State<StatefulWidget> createState() {
  38. return _ParagraphState();
  39. }
  40. }
  41. class _ParagraphState extends State<ParagraphPage> {
  42. List<IElement>? _elements = [];
  43. int _itemCount = 0;
  44. @override
  45. initState() {
  46. super.initState();
  47. }
  48. @override
  49. Widget build(BuildContext context) {
  50. _elements = widget.paragraph.elements;
  51. _itemCount = _elements!.length;
  52. if (_itemCount == 0) {
  53. return const SizedBox();
  54. } else if (_itemCount == 2 &&
  55. _elements![0].elementType!.name == ElementType.staticText!.name &&
  56. (_elements![1].elementType!.name == ElementType.singleSelected!.name ||
  57. _elements![1].elementType!.name ==
  58. ElementType.multiSelected!.name ||
  59. _elements![1].elementType!.name == ElementType.inputText!.name)) {
  60. try {
  61. final staticText = _elements![0];
  62. if (staticText.parent != null) {
  63. final paragraph = staticText.parent as Paragraph;
  64. if (paragraph.parent != null) {
  65. final cell = paragraph.parent as RTCell;
  66. if (cell.parent != null) {
  67. final table = cell.parent as RTTable;
  68. final values = table.cells!.values.toList();
  69. for (var i = 0; i < values.length; i++) {
  70. if (values[i] == cell) {
  71. final key = table.cells!.keys.toList()[i];
  72. final column = key.column;
  73. final width = table.columnDefinitions![column!].width;
  74. var valueWidth = 0.0;
  75. if (_elements![1].elementType!.name ==
  76. ElementType.inputText!.name) {
  77. final input = _elements![1] as InputText;
  78. valueWidth = input.lineWidth!;
  79. }
  80. if (_elements![1].elementType!.name ==
  81. ElementType.singleSelected!.name) {
  82. final input = _elements![1] as SingleSelected;
  83. valueWidth = input.lineWidth!;
  84. }
  85. if (_elements![1].elementType!.name ==
  86. ElementType.multiSelected!.name) {
  87. final input = _elements![1] as MultiSelected;
  88. valueWidth = input.lineWidth!;
  89. }
  90. final textWidth = width! - valueWidth;
  91. final textElement = staticText as StaticText;
  92. textElement.lineWidth = textWidth;
  93. }
  94. }
  95. }
  96. }
  97. }
  98. } catch (e) {
  99. print(e);
  100. }
  101. }
  102. final margin = widget.paragraph.margin!;
  103. return Container(
  104. margin: EdgeInsets.only(
  105. top: margin.top!,
  106. bottom: margin.bottom!,
  107. left: margin.left!,
  108. right: margin.right!,
  109. ),
  110. alignment: AlignmentConvert.horizontalConvert(
  111. widget.paragraph.horizontalAlignment),
  112. child: Wrap(
  113. alignment: WrapAlignment.spaceEvenly,
  114. children: [
  115. ..._elements!.map((element) {
  116. if (element.elementType!.name == ElementType.inputText!.name) {
  117. InputText inputText = element as InputText;
  118. return RInputText(inputText: inputText);
  119. } else if (element.elementType!.name ==
  120. ElementType.staticText!.name) {
  121. StaticText staticText = element as StaticText;
  122. return RStaticText(staticText);
  123. } else if (element.elementType!.name ==
  124. ElementType.singleSelected!.name) {
  125. SingleSelected singleSelected = element as SingleSelected;
  126. return RSingleSelected(singleSelected);
  127. } else if (element.elementType!.name == ElementType.line!.name) {
  128. Line line = element as Line;
  129. return RLine(line);
  130. } else if (element.elementType!.name ==
  131. ElementType.dateTime!.name) {
  132. final dateTime = element as DateTimeElement;
  133. return RDateTime(dateTime);
  134. } else if (element.elementType!.name ==
  135. ElementType.multiSelected!.name) {
  136. final multiSelected = element as MultiSelected;
  137. return RMultiSelected(multiSelected);
  138. } else if (element.elementType!.name ==
  139. ElementType.inputImage!.name) {
  140. final inputImage = element as InputImage;
  141. return RInputImage(inputImage);
  142. } else if (element.elementType!.name ==
  143. ElementType.staticImage!.name) {
  144. final staticImage = element as StaticImage;
  145. return RStaticImage(staticImage);
  146. } else if (element.elementType!.name == ElementType.space!.name) {
  147. final space = element as Space;
  148. return RSpace(space);
  149. } else if (element.elementType!.name ==
  150. ElementType.pageNumber!.name) {
  151. final pageNumber = element as PageNumber;
  152. return RPageNumber(pageNumber);
  153. }
  154. return Container(
  155. height: 30,
  156. width: 180,
  157. decoration: TestBoxDecoration.buildDecoration(),
  158. child: const Text('未知组件占位'),
  159. );
  160. }),
  161. ],
  162. ),
  163. );
  164. }
  165. void _showMultiSelect(List<String>? items) async {
  166. // a list of selectable items
  167. // these items can be hard-coded or dynamically fetched from a database/API
  168. if (items!.isEmpty) {
  169. return;
  170. }
  171. final List<String>? results = await showDialog(
  172. context: context,
  173. builder: (BuildContext context) {
  174. return MultiSelect(items: items);
  175. },
  176. );
  177. }
  178. }