active_canvas.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import 'package:fis_measure/interfaces/process/items/item.dart';
  2. import 'package:fis_measure/interfaces/process/items/item_feature.dart';
  3. import 'package:fis_measure/interfaces/process/workspace/application.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:get/get.dart';
  6. class MeasureItemCanvas extends StatefulWidget {
  7. @override
  8. State<StatefulWidget> createState() => _MeasureItemCanvasState();
  9. }
  10. class _MeasureItemCanvasState extends State<MeasureItemCanvas> {
  11. @override
  12. Widget build(BuildContext context) {
  13. return Container();
  14. }
  15. }
  16. class MeasureActiveCanvasPanel extends StatefulWidget {
  17. const MeasureActiveCanvasPanel({Key? key}) : super(key: key);
  18. @override
  19. State<StatefulWidget> createState() => _ActiveCanvasPanelState();
  20. }
  21. class _ActiveCanvasPanelState extends State<MeasureActiveCanvasPanel> {
  22. late final application = Get.find<IApplication>();
  23. IMeasureItem? item;
  24. IMeasureItemFeature? feature;
  25. @override
  26. void initState() {
  27. item = application.activeItem;
  28. feature = item?.feature;
  29. super.initState();
  30. WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
  31. _addListenrs();
  32. });
  33. }
  34. @override
  35. void dispose() {
  36. _removeListenrs();
  37. super.dispose();
  38. }
  39. @override
  40. Widget build(BuildContext context) {
  41. if (feature == null) return const SizedBox();
  42. return LayoutBuilder(builder: (context, constraints) {
  43. return SizedBox(
  44. width: constraints.maxWidth,
  45. height: constraints.maxHeight,
  46. child: RepaintBoundary(
  47. child: CustomPaint(
  48. painter: _PanelPainter(feature!),
  49. ),
  50. ),
  51. );
  52. });
  53. return RepaintBoundary(
  54. child: CustomPaint(
  55. painter: _PanelPainter(feature!),
  56. ),
  57. );
  58. }
  59. void _onActiveItemChanged(Object sender, IMeasureItem? e) {
  60. if (e != item) {
  61. _removeListenrs();
  62. item = e;
  63. feature = e?.feature;
  64. _addListenrs();
  65. }
  66. }
  67. void _onActiveItemFeatureChanged(Object sender, IMeasureItemFeature? e) {
  68. setState(() {
  69. feature = e;
  70. });
  71. }
  72. void _addListenrs() {
  73. application.activeItemChanged.addListener(_onActiveItemChanged);
  74. application.activeItem?.featureChanged
  75. .addListener(_onActiveItemFeatureChanged);
  76. }
  77. void _removeListenrs() {
  78. application.activeItemChanged.removeListener(_onActiveItemChanged);
  79. application.activeItem?.featureChanged
  80. .removeListener(_onActiveItemFeatureChanged);
  81. }
  82. }
  83. class _PanelPainter extends CustomPainter {
  84. final IMeasureItemFeature feature;
  85. _PanelPainter(this.feature);
  86. @override
  87. void paint(Canvas canvas, Size size) {
  88. feature.paint(canvas, size);
  89. }
  90. @override
  91. bool shouldRepaint(covariant _PanelPainter oldDelegate) {
  92. return oldDelegate.hashCode != hashCode;
  93. }
  94. }