123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import 'dart:typed_data';
- import 'dart:ui' as ui;
- 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:flutter/rendering.dart';
- import 'package:get/get.dart';
- import 'measure_result.dart';
- class MeasureImageCapturer {
- bool state = false;
- MeasureImageCapturer(
- this.globalKey,
- this.application,
- this.dataController, {
- this.onImageSaveBefore,
- this.onImageSavedAfter,
- this.onImageSaveDuring,
- });
- final GlobalKey globalKey;
- final IApplication application;
- final IMeasureDataController dataController;
- final VoidCallback? onImageSaveBefore;
- final VoidCallback? onImageSavedAfter;
- final VoidCallback? onImageSaveDuring;
- /// 保存图片
- void saveImage() async {
- if (state) return;
- state = true;
- onImageSaveBefore?.call();
- final features = <IMeasureItemFeature>[];
- for (var item in application.measureItems) {
- if (item.measuredFeatures.isNotEmpty) {
- features.addAll(item.measuredFeatures);
- }
- if (item.feature != null) {
- features.add(item.feature!);
- }
- }
- MeasureResult measureResult = MeasureResult(
- measureApplicationName: application.applicationName,
- features: features,
- );
- await Future.delayed(const Duration(milliseconds: 10), () async {
- final RenderRepaintBoundary? boundary = globalKey.currentContext
- ?.findRenderObject() as RenderRepaintBoundary?;
- if (boundary != null) {
- final image = await boundary.toImage();
- final byteData = await image.toByteData(format: ui.ImageByteFormat.png);
- final pngBytes = byteData!.buffer.asUint8List();
- Get.dialog(
- CaptureImage(
- bytes: pngBytes,
- ),
- transitionCurve: Curves.bounceInOut,
- );
- // await (dataController as MeasureDataController).saveImage.call(
- // pngBytes,
- // dataController.measureImageData.patientCode ?? '',
- // dataController.measureImageData.recordCode ?? '',
- // dataController.measureImageData.remedicalCode ?? '',
- // measureResult.toDisplay(),
- // );
- state = false;
- onImageSavedAfter?.call();
- }
- });
- }
- }
- class CaptureImage extends StatelessWidget {
- final Uint8List bytes;
- const CaptureImage({
- Key? key,
- required this.bytes,
- }) : super(key: key);
- @override
- Widget build(BuildContext context) {
- return SimpleDialog(
- children: [Image.memory(bytes)],
- titlePadding: EdgeInsets.zero,
- contentPadding: EdgeInsets.zero,
- backgroundColor: Colors.transparent,
- elevation: 4,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.all(
- Radius.circular(
- 4,
- ),
- ),
- ),
- );
- }
- }
|