From d5b9448c890b1cbba4770c76bff7a5dd9456ca00 Mon Sep 17 00:00:00 2001 From: Vadim <44135514+vodemn@users.noreply.github.com> Date: Wed, 8 Nov 2023 13:18:32 +0100 Subject: [PATCH] added long press to remove metering spot --- .../widget_camera_spot_detector.dart | 17 ++++++++++------- .../camera_preview/widget_camera_preview.dart | 4 ++-- .../event_container_camera.dart | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/screens/metering/components/camera_container/components/camera_preview/components/camera_spot_detector/widget_camera_spot_detector.dart b/lib/screens/metering/components/camera_container/components/camera_preview/components/camera_spot_detector/widget_camera_spot_detector.dart index 44ded02..0ec7f17 100644 --- a/lib/screens/metering/components/camera_container/components/camera_preview/components/camera_spot_detector/widget_camera_spot_detector.dart +++ b/lib/screens/metering/components/camera_container/components/camera_preview/components/camera_spot_detector/widget_camera_spot_detector.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/res/dimens.dart'; class CameraSpotDetector extends StatefulWidget { - final ValueChanged onSpotTap; + final ValueChanged onSpotTap; const CameraSpotDetector({ required this.onSpotTap, @@ -22,6 +22,7 @@ class _CameraSpotDetectorState extends State { builder: (_, constraints) => GestureDetector( behavior: HitTestBehavior.opaque, onTapDown: (TapDownDetails details) => onViewFinderTap(details, constraints), + onLongPress: () => onViewFinderTap(null, constraints), child: Stack( children: [ if (spot != null) @@ -39,16 +40,18 @@ class _CameraSpotDetectorState extends State { ); } - void onViewFinderTap(TapDownDetails details, BoxConstraints constraints) { + void onViewFinderTap(TapDownDetails? details, BoxConstraints constraints) { setState(() { - spot = details.localPosition; + spot = details?.localPosition; }); widget.onSpotTap( - Offset( - details.localPosition.dx / constraints.maxWidth, - details.localPosition.dy / constraints.maxHeight, - ), + details != null + ? Offset( + details.localPosition.dx / constraints.maxWidth, + details.localPosition.dy / constraints.maxHeight, + ) + : null, ); } } diff --git a/lib/screens/metering/components/camera_container/components/camera_preview/widget_camera_preview.dart b/lib/screens/metering/components/camera_container/components/camera_preview/widget_camera_preview.dart index a259aec..88913ee 100644 --- a/lib/screens/metering/components/camera_container/components/camera_preview/widget_camera_preview.dart +++ b/lib/screens/metering/components/camera_container/components/camera_preview/widget_camera_preview.dart @@ -13,7 +13,7 @@ import 'package:lightmeter/screens/metering/components/camera_container/models/c class CameraPreview extends StatefulWidget { final CameraController? controller; final CameraErrorType? error; - final ValueChanged onSpotTap; + final ValueChanged onSpotTap; const CameraPreview({ this.controller, @@ -53,7 +53,7 @@ class _CameraPreviewState extends State { class _CameraPreviewBuilder extends StatefulWidget { final CameraController controller; - final ValueChanged onSpotTap; + final ValueChanged onSpotTap; const _CameraPreviewBuilder({ required this.controller, diff --git a/lib/screens/metering/components/camera_container/event_container_camera.dart b/lib/screens/metering/components/camera_container/event_container_camera.dart index 6c02e27..fe0713d 100644 --- a/lib/screens/metering/components/camera_container/event_container_camera.dart +++ b/lib/screens/metering/components/camera_container/event_container_camera.dart @@ -57,7 +57,7 @@ class ExposureOffsetResetEvent extends CameraContainerEvent { } class ExposureSpotChangedEvent extends CameraContainerEvent { - final Offset offset; + final Offset? offset; const ExposureSpotChangedEvent(this.offset);