input_image.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import 'package:fis_lib_report/converts/alignment_convert.dart';
  2. import 'package:fis_lib_report/converts/margin_convert.dart';
  3. import 'package:fis_lib_report/converts/pt_to_px_converter.dart';
  4. import 'package:fis_lib_report/pages/helpler.dart';
  5. import 'package:fis_lib_report/report/inputImage.dart';
  6. import 'package:fis_lib_report/report/inputImageList.dart';
  7. import 'package:fis_lib_report/report_info/input_image_info.dart';
  8. import 'package:fis_lib_report/report_info/input_image_list_info.dart';
  9. import 'package:fis_lib_report/report_info/report_info.dart';
  10. import 'package:fis_ui/business/vid_img_view/index.dart';
  11. import 'package:flutter/cupertino.dart';
  12. import 'package:flutter/material.dart';
  13. class RInputImage extends StatefulWidget {
  14. final InputImage inputImage;
  15. RInputImage(this.inputImage);
  16. @override
  17. State<StatefulWidget> createState() {
  18. return _RInputImageState();
  19. }
  20. }
  21. class _RInputImageState extends State<RInputImage> {
  22. InputImageInfo? inputImageInfo;
  23. _RInputImageState();
  24. Color _borderColor = Colors.grey;
  25. bool _isSelected = false;
  26. bool _hasImageBorder = false;
  27. String _imageUrl = '';
  28. Widget _child = const Text('请点击此处后选择图片');
  29. @override
  30. initState() {
  31. super.initState();
  32. }
  33. @override
  34. Widget build(BuildContext context) {
  35. _initDatas();
  36. return SizedBox(
  37. width: PtToPxConverter.ptToPx(widget.inputImage.imageWidth!) + 6,
  38. child: MouseRegion(
  39. cursor: SystemMouseCursors.click,
  40. child: GestureDetector(
  41. onTap: () {
  42. if (_isSelected) {
  43. setState(() {
  44. _borderColor = Colors.grey;
  45. _isSelected = false;
  46. _hasImageBorder = false;
  47. if (inputImageInfo != null) {
  48. inputImageInfo!.isSelected = false;
  49. }
  50. });
  51. } else {
  52. setState(() {
  53. _borderColor = const Color.fromARGB(255, 64, 159, 248);
  54. _isSelected = true;
  55. _hasImageBorder = true;
  56. if (inputImageInfo != null) {
  57. inputImageInfo!.isSelected = true;
  58. }
  59. });
  60. }
  61. },
  62. child: Row(
  63. mainAxisAlignment: AlignmentConvert.horizontalToMainConvert(
  64. widget.inputImage.horizontalAlignment),
  65. children: [
  66. Container(
  67. padding: const EdgeInsets.all(3),
  68. height:
  69. PtToPxConverter.ptToPx(widget.inputImage.imageHeight!) + 6,
  70. width:
  71. PtToPxConverter.ptToPx(widget.inputImage.imageWidth!) + 6,
  72. alignment: Alignment.center,
  73. margin: MarginConvert.marginConvert(widget.inputImage.margin),
  74. decoration: BoxDecoration(
  75. border: _hasImageBorder
  76. ? Border.all(
  77. width: 0.5,
  78. color: _borderColor,
  79. )
  80. : null,
  81. color: Colors.transparent),
  82. child: _child,
  83. ),
  84. ],
  85. ),
  86. ),
  87. ),
  88. );
  89. }
  90. void _initDatas() {
  91. _hasImageBorder = widget.inputImage.hasImageBorder!;
  92. final element = ReportInfo.instance.getElementInfo(widget.inputImage);
  93. if (element != null) {
  94. inputImageInfo = element as InputImageInfo;
  95. inputImageInfo!.onSelect!.addListener((sender, e) {
  96. setState(() {
  97. if (_imageUrl != e) {
  98. _imageUrl = e;
  99. _child = _getChild();
  100. } else {
  101. _imageUrl = '';
  102. _child = const Text('请点击此处后选择图片');
  103. }
  104. });
  105. });
  106. }
  107. }
  108. Widget _getChild() {
  109. if (_imageUrl.isNotEmpty) {
  110. return VidImageView(
  111. url: _imageUrl,
  112. fit: BoxFit.fill,
  113. height: PtToPxConverter.ptToPx(widget.inputImage.imageHeight!),
  114. width: PtToPxConverter.ptToPx(widget.inputImage.imageWidth!),
  115. );
  116. }
  117. return const Text('请点击此处后选择图片');
  118. }
  119. }