paragraph_page.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import 'package:fis_lib_report/converts/alignment_convert.dart';
  2. import 'package:fis_lib_report/pages/components/RDateTime.dart';
  3. import 'package:fis_lib_report/pages/components/input_text.dart';
  4. import 'package:fis_lib_report/pages/components/line.dart';
  5. import 'package:fis_lib_report/pages/components/multi_select.dart';
  6. import 'package:fis_lib_report/pages/components/multi_selected.dart';
  7. import 'package:fis_lib_report/pages/components/single_select.dart';
  8. import 'package:fis_lib_report/pages/components/static_Text.dart';
  9. import 'package:fis_lib_report/pages/helpler.dart';
  10. import 'package:fis_lib_report/report/dateTimeElement.dart';
  11. import 'package:fis_lib_report/report/element_type.dart';
  12. import 'package:fis_lib_report/report/inputText.dart';
  13. import 'package:fis_lib_report/report/interfaces/element.dart';
  14. import 'package:fis_lib_report/report/interfaces/position_layout.dart';
  15. import 'package:fis_lib_report/report/line.dart';
  16. import 'package:fis_lib_report/report/multiSelected.dart';
  17. import 'package:fis_lib_report/report/paragraph.dart';
  18. import 'package:fis_lib_report/report/singleSelected.dart';
  19. import 'package:fis_lib_report/report/staticText.dart';
  20. import 'package:flutter/material.dart';
  21. class ParagraphPage extends StatefulWidget {
  22. final Paragraph paragraph;
  23. ParagraphPage({Key? key, required this.paragraph}) : super(key: key);
  24. @override
  25. State<StatefulWidget> createState() {
  26. return _ParagraphState();
  27. }
  28. }
  29. class _ParagraphState extends State<ParagraphPage> {
  30. List<IElement>? _elements = [];
  31. int _itemCount = 0;
  32. @override
  33. initState() {
  34. _elements = widget.paragraph.elements;
  35. _itemCount = _elements!.length;
  36. super.initState();
  37. }
  38. @override
  39. Widget build(BuildContext context) {
  40. if (_itemCount == 0) {
  41. return const SizedBox();
  42. }
  43. final margin = widget.paragraph.margin!;
  44. return Container(
  45. margin: EdgeInsets.only(
  46. top: margin.top!,
  47. bottom: margin.bottom!,
  48. left: margin.left!,
  49. right: margin.right!,
  50. ),
  51. alignment: AlignmentConvert.horizontalConvert(
  52. widget.paragraph.horizontalAlignment),
  53. child: Wrap(
  54. alignment: WrapAlignment.spaceEvenly,
  55. children: [
  56. ..._elements!.map((element) {
  57. if (element.elementType!.name == ElementType.inputText!.name) {
  58. InputText inputText = element as InputText;
  59. return RInputText(inputText: inputText);
  60. } else if (element.elementType!.name ==
  61. ElementType.staticText!.name) {
  62. StaticText staticText = element as StaticText;
  63. if (staticText.lineWidth == 0) {
  64. staticText.lineWidth = staticText.lineLength! * 10.5;
  65. }
  66. return RStaticText(staticText);
  67. } else if (element.elementType!.name ==
  68. ElementType.singleSelected!.name) {
  69. SingleSelected singleSelected = element as SingleSelected;
  70. return RSingleSelected(singleSelected);
  71. } else if (element.elementType!.name == ElementType.line!.name) {
  72. Line line = element as Line;
  73. return RLine(line);
  74. } else if (element.elementType!.name ==
  75. ElementType.dateTime!.name) {
  76. final dateTime = element as DateTimeElement;
  77. return RDateTime(dateTime);
  78. } else if (element.elementType!.name ==
  79. ElementType.multiSelected!.name) {
  80. final multiSelected = element as MultiSelected;
  81. return RMultiSelected(multiSelected);
  82. }
  83. return Container(
  84. height: 30,
  85. width: 80,
  86. decoration: TestBoxDecoration.buildDecoration(),
  87. child: const Text('未知组件占位'),
  88. );
  89. }),
  90. ],
  91. ),
  92. );
  93. }
  94. void _showMultiSelect(List<String>? items) async {
  95. // a list of selectable items
  96. // these items can be hard-coded or dynamically fetched from a database/API
  97. if (items!.isEmpty) {
  98. return;
  99. }
  100. final List<String>? results = await showDialog(
  101. context: context,
  102. builder: (BuildContext context) {
  103. return MultiSelect(items: items);
  104. },
  105. );
  106. }
  107. }