input_image.dart 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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/components/vid_image.dart';
  5. import 'package:fis_lib_report/pages/helpler.dart';
  6. import 'package:fis_lib_report/report/inputImage.dart';
  7. import 'package:fis_lib_report/report/inputImageList.dart';
  8. import 'package:fis_lib_report/report_info/input_image_info.dart';
  9. import 'package:fis_lib_report/report_info/input_image_list_info.dart';
  10. import 'package:fis_lib_report/report_info/report_info.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 MouseRegion(
  37. cursor: SystemMouseCursors.click,
  38. child: GestureDetector(
  39. onTap: () {
  40. if (_isSelected) {
  41. setState(() {
  42. _borderColor = Colors.grey;
  43. _isSelected = false;
  44. _hasImageBorder = false;
  45. if (inputImageInfo != null) {
  46. inputImageInfo!.isSelected = false;
  47. }
  48. });
  49. } else {
  50. setState(() {
  51. _borderColor = const Color.fromARGB(255, 64, 159, 248);
  52. _isSelected = true;
  53. _hasImageBorder = true;
  54. if (inputImageInfo != null) {
  55. inputImageInfo!.isSelected = true;
  56. }
  57. });
  58. }
  59. },
  60. child: Row(
  61. mainAxisAlignment: AlignmentConvert.horizontalToMainConvert(
  62. widget.inputImage.horizontalAlignment),
  63. children: [
  64. Container(
  65. padding: const EdgeInsets.all(3),
  66. height:
  67. PtToPxConverter.ptToPx(widget.inputImage.imageHeight!) + 6,
  68. width: PtToPxConverter.ptToPx(widget.inputImage.imageWidth!) + 6,
  69. alignment: Alignment.center,
  70. margin: MarginConvert.marginConvert(widget.inputImage.margin),
  71. decoration: BoxDecoration(
  72. border: _hasImageBorder
  73. ? Border.all(
  74. width: 0.5,
  75. color: _borderColor,
  76. )
  77. : null,
  78. color: Colors.transparent),
  79. child: _child,
  80. ),
  81. ],
  82. ),
  83. ),
  84. );
  85. }
  86. void _initDatas() {
  87. _hasImageBorder = widget.inputImage.hasImageBorder!;
  88. final element = ReportInfo.instance.getElementInfo(widget.inputImage);
  89. if (element != null) {
  90. inputImageInfo = element as InputImageInfo;
  91. inputImageInfo!.onSelect!.addListener((sender, e) {
  92. setState(() {
  93. if (_imageUrl != e) {
  94. _imageUrl = e;
  95. _child = _getChild();
  96. } else {
  97. _imageUrl = '';
  98. _child = const Text('请点击此处后选择图片');
  99. }
  100. });
  101. });
  102. }
  103. }
  104. Widget _getChild() {
  105. if (_imageUrl.isNotEmpty) {
  106. return VidImageView.network(
  107. _imageUrl,
  108. fit: BoxFit.fill,
  109. height: PtToPxConverter.ptToPx(widget.inputImage.imageHeight!),
  110. width: PtToPxConverter.ptToPx(widget.inputImage.imageWidth!),
  111. );
  112. }
  113. return const Text('请点击此处后选择图片');
  114. }
  115. }