123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import 'package:fis_measure/interfaces/process/annotations/annotation.dart';
- import 'package:fis_measure/interfaces/process/items/item_feature.dart';
- import 'package:fis_measure/interfaces/process/workspace/application.dart';
- import 'package:fis_measure/process/workspace/measure_data_controller.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- class MeasureRecordsCanvasPanel extends StatefulWidget {
- const MeasureRecordsCanvasPanel({Key? key}) : super(key: key);
- @override
- State<StatefulWidget> createState() => _RecordsCanvasPanelState();
- }
- class _RecordsCanvasPanelState extends State<MeasureRecordsCanvasPanel> {
- late final application = Get.find<IApplication>();
- late final measureData = Get.find<MeasureDataController>();
- late List<IMeasureItemFeature> measureFeatures = [];
- late List<IAnnotationItemFeature> annotationFeatures = [];
- bool get hasNoData => measureFeatures.isEmpty && annotationFeatures.isEmpty;
- @override
- void initState() {
- _addListenrs();
- super.initState();
- }
- @override
- void dispose() {
- _removeListenrs();
- super.dispose();
- }
- @override
- Widget build(BuildContext context) {
- if (hasNoData) {
- return const SizedBox();
- }
- return LayoutBuilder(builder: (context, constraints) {
- return ClipRect(
- child: SizedBox(
- width: constraints.maxWidth,
- height: constraints.maxHeight,
- child: RepaintBoundary(
- child: CustomPaint(
- painter: _PanelPainter(measureFeatures, annotationFeatures),
- ),
- ),
- ),
- );
- });
- }
- void _updateFeatures() {
- measureFeatures.clear();
- for (var item in application.measureItems) {
- measureFeatures.addAll(item.measuredFeatures);
- }
- annotationFeatures.clear();
- for (var item in application.annotationItems) {
- annotationFeatures.addAll(item.features);
- }
- }
- void _onMeasureRerenderReady(Object sender, void e) {
- if (mounted) {
- setState(() {
- _updateFeatures();
- });
- }
- }
- /// 样式更新事件监听
- void _onMeasureSystemSettingChanged(_, e) {
- setState(() {});
- }
- void _addListenrs() {
- application.updateRenderReady.addListener(_onMeasureRerenderReady);
- measureData.measureSystemSettingChanged
- .addListener(_onMeasureSystemSettingChanged);
- }
- void _removeListenrs() {
- application.updateRenderReady.removeListener(_onMeasureRerenderReady);
- measureData.measureSystemSettingChanged
- .removeListener(_onMeasureSystemSettingChanged);
- }
- }
- class _PanelPainter extends CustomPainter {
- final List<IMeasureItemFeature> measureFeatures;
- final List<IAnnotationItemFeature> annotationFeatures;
- _PanelPainter(this.measureFeatures, this.annotationFeatures);
- @override
- void paint(Canvas canvas, Size size) {
- for (final feature in measureFeatures) {
- if (feature.checkCanPaint()) {
- feature.paint(canvas, size);
- }
- }
- for (final feature in annotationFeatures) {
- feature.paint(canvas, size);
- }
- }
- @override
- bool shouldRepaint(covariant _PanelPainter oldDelegate) {
- return oldDelegate.hashCode != hashCode;
- }
- }
|