paragraph_page.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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/single_select.dart';
  7. import 'package:fis_lib_report/pages/components/static_Text.dart';
  8. import 'package:fis_lib_report/report/dateTimeElement.dart';
  9. import 'package:fis_lib_report/report/element_type.dart';
  10. import 'package:fis_lib_report/report/inputText.dart';
  11. import 'package:fis_lib_report/report/interfaces/element.dart';
  12. import 'package:fis_lib_report/report/interfaces/position_layout.dart';
  13. import 'package:fis_lib_report/report/line.dart';
  14. import 'package:fis_lib_report/report/multiSelected.dart';
  15. import 'package:fis_lib_report/report/paragraph.dart';
  16. import 'package:fis_lib_report/report/singleSelected.dart';
  17. import 'package:fis_lib_report/report/staticText.dart';
  18. import 'package:flutter/material.dart';
  19. class ParagraphPage extends StatefulWidget {
  20. final Paragraph paragraph;
  21. ParagraphPage({Key? key, required this.paragraph}) : super(key: key);
  22. @override
  23. State<StatefulWidget> createState() {
  24. return _ParagraphState();
  25. }
  26. }
  27. class _ParagraphState extends State<ParagraphPage> {
  28. List<IElement>? _elements = [];
  29. int _itemCount = 0;
  30. @override
  31. initState() {
  32. _elements = widget.paragraph.elements;
  33. _itemCount = _elements!.length;
  34. super.initState();
  35. }
  36. @override
  37. Widget build(BuildContext context) {
  38. if (_itemCount == 0) {
  39. return const SizedBox();
  40. }
  41. final margin = widget.paragraph.margin!;
  42. return Container(
  43. margin: EdgeInsets.only(
  44. top: margin.top!,
  45. bottom: margin.bottom!,
  46. left: margin.left!,
  47. right: margin.right!,
  48. ),
  49. alignment: AlignmentConvert.verticalLayoutConvert(
  50. widget.paragraph.verticalAlignment),
  51. child: Row(
  52. mainAxisAlignment:
  53. widget.paragraph.horizontalAlignment == HorizontalLayout.Center
  54. ? MainAxisAlignment.center
  55. : MainAxisAlignment.start,
  56. crossAxisAlignment: CrossAxisAlignment.start,
  57. children: [
  58. ..._elements!.map((element) {
  59. if (element.elementType!.name == ElementType.inputText!.name) {
  60. InputText inputText = element as InputText;
  61. return RInputText(
  62. inputText: inputText,
  63. );
  64. } else if (element.elementType!.name ==
  65. ElementType.staticText!.name) {
  66. StaticText staticText = element as StaticText;
  67. return RStaticText(staticText);
  68. } else if (element.elementType!.name ==
  69. ElementType.singleSelected!.name) {
  70. SingleSelected singleSelected = element as SingleSelected;
  71. return RSingleSelected(singleSelected);
  72. } else if (element.elementType!.name == ElementType.line!.name) {
  73. Line line = element as Line;
  74. return RLine(line);
  75. } else if (element.elementType!.name ==
  76. ElementType.dateTime!.name) {
  77. final dateTime = element as DateTimeElement;
  78. return RDateTime(dateTime);
  79. } else if (element.elementType!.name ==
  80. ElementType.multiSelected!.name) {
  81. final multiSelected = element as MultiSelected;
  82. List<String>? values = multiSelected.items;
  83. return SizedBox(
  84. width: 120,
  85. height: 28,
  86. child: TextField(
  87. cursorWidth: 0,
  88. mouseCursor: SystemMouseCursors.click,
  89. decoration: const InputDecoration(
  90. suffixIcon: Icon(Icons.arrow_drop_down),
  91. ),
  92. onTap: () {
  93. _showMultiSelect(values);
  94. },
  95. ),
  96. );
  97. }
  98. return Container(
  99. height: 30,
  100. width: 80,
  101. decoration: BoxDecoration(
  102. border: Border.all(
  103. width: 0.5,
  104. color: const Color.fromARGB(255, 83, 83, 83),
  105. ),
  106. color: Colors.grey[200]),
  107. child: const Text('组件占位'),
  108. );
  109. }),
  110. ],
  111. ),
  112. );
  113. }
  114. void _showMultiSelect(List<String>? items) async {
  115. // a list of selectable items
  116. // these items can be hard-coded or dynamically fetched from a database/API
  117. if (items!.isEmpty) {
  118. return;
  119. }
  120. final List<String>? results = await showDialog(
  121. context: context,
  122. builder: (BuildContext context) {
  123. return MultiSelect(items: items);
  124. },
  125. );
  126. }
  127. }