paragraph_page.dart 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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/singleSelected.dart';
  26. import 'package:fis_lib_report/report/space.dart';
  27. import 'package:fis_lib_report/report/staticText.dart';
  28. import 'package:fis_lib_report/report/static_image.dart';
  29. import 'package:fis_lib_report/report_info/report_info.dart';
  30. import 'package:flutter/material.dart';
  31. class ParagraphPage extends StatefulWidget {
  32. final Paragraph paragraph;
  33. ParagraphPage({Key? key, required this.paragraph}) : super(key: key);
  34. @override
  35. State<StatefulWidget> createState() {
  36. return _ParagraphState();
  37. }
  38. }
  39. class _ParagraphState extends State<ParagraphPage> {
  40. List<IElement>? _elements = [];
  41. int _itemCount = 0;
  42. @override
  43. initState() {
  44. _elements = widget.paragraph.elements;
  45. _itemCount = _elements!.length;
  46. super.initState();
  47. }
  48. @override
  49. Widget build(BuildContext context) {
  50. if (_itemCount == 0) {
  51. return const SizedBox();
  52. }
  53. final margin = widget.paragraph.margin!;
  54. return Container(
  55. margin: EdgeInsets.only(
  56. top: margin.top!,
  57. bottom: margin.bottom!,
  58. left: margin.left!,
  59. right: margin.right!,
  60. ),
  61. alignment: AlignmentConvert.horizontalConvert(
  62. widget.paragraph.horizontalAlignment),
  63. child: Wrap(
  64. alignment: WrapAlignment.spaceEvenly,
  65. children: [
  66. ..._elements!.map((element) {
  67. if (element.elementType!.name == ElementType.inputText!.name) {
  68. InputText inputText = element as InputText;
  69. return RInputText(inputText: inputText);
  70. } else if (element.elementType!.name ==
  71. ElementType.staticText!.name) {
  72. StaticText staticText = element as StaticText;
  73. if (staticText.lineWidth == 0) {
  74. staticText.lineWidth = staticText.lineLength! * 10.5;
  75. }
  76. return RStaticText(staticText);
  77. } else if (element.elementType!.name ==
  78. ElementType.singleSelected!.name) {
  79. SingleSelected singleSelected = element as SingleSelected;
  80. return RSingleSelected(singleSelected);
  81. } else if (element.elementType!.name == ElementType.line!.name) {
  82. Line line = element as Line;
  83. return RLine(line);
  84. } else if (element.elementType!.name ==
  85. ElementType.dateTime!.name) {
  86. final dateTime = element as DateTimeElement;
  87. return RDateTime(dateTime);
  88. } else if (element.elementType!.name ==
  89. ElementType.multiSelected!.name) {
  90. final multiSelected = element as MultiSelected;
  91. return RMultiSelected(multiSelected);
  92. } else if (element.elementType!.name ==
  93. ElementType.inputImage!.name) {
  94. final inputImage = element as InputImage;
  95. return RInputImage(inputImage);
  96. } else if (element.elementType!.name ==
  97. ElementType.staticImage!.name) {
  98. final staticImage = element as StaticImage;
  99. return RStaticImage(staticImage);
  100. } else if (element.elementType!.name == ElementType.space!.name) {
  101. final space = element as Space;
  102. return RSpace(space);
  103. } else if (element.elementType!.name ==
  104. ElementType.pageNumber!.name) {
  105. final pageNumber = element as PageNumber;
  106. return RPageNumber(pageNumber);
  107. }
  108. return Container(
  109. height: 30,
  110. width: 180,
  111. decoration: TestBoxDecoration.buildDecoration(),
  112. child: const Text('未知组件占位'),
  113. );
  114. }),
  115. ],
  116. ),
  117. );
  118. }
  119. void _showMultiSelect(List<String>? items) async {
  120. // a list of selectable items
  121. // these items can be hard-coded or dynamically fetched from a database/API
  122. if (items!.isEmpty) {
  123. return;
  124. }
  125. final List<String>? results = await showDialog(
  126. context: context,
  127. builder: (BuildContext context) {
  128. return MultiSelect(items: items);
  129. },
  130. );
  131. }
  132. }