From 731610ed94edd9b4ee45fdd850a20003774b4f17 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 23 Apr 2024 08:30:59 +0530 Subject: [PATCH] [mob] Refactor --- .../ui/viewer/file_details/face_widget.dart | 9 +- .../people/cropped_face_image_view.dart | 90 +++++++++---------- 2 files changed, 48 insertions(+), 51 deletions(-) diff --git a/mobile/lib/ui/viewer/file_details/face_widget.dart b/mobile/lib/ui/viewer/file_details/face_widget.dart index 3f09ffd986..4357cec76c 100644 --- a/mobile/lib/ui/viewer/file_details/face_widget.dart +++ b/mobile/lib/ui/viewer/file_details/face_widget.dart @@ -264,12 +264,9 @@ class _FaceWidgetState extends State { }, child: Column( children: [ - SizedBox( - height: 60, - child: CroppedFaceImageView( - enteFile: widget.file, - face: widget.face, - ), + CroppedFaceImageView( + enteFile: widget.file, + face: widget.face, ), const SizedBox(height: 8), if (widget.person != null) diff --git a/mobile/lib/ui/viewer/people/cropped_face_image_view.dart b/mobile/lib/ui/viewer/people/cropped_face_image_view.dart index 3a9053d317..9f1717707c 100644 --- a/mobile/lib/ui/viewer/people/cropped_face_image_view.dart +++ b/mobile/lib/ui/viewer/people/cropped_face_image_view.dart @@ -33,48 +33,48 @@ class CroppedFaceImageView extends StatelessWidget { @override Widget build(BuildContext context) { - return FutureBuilder( - future: getImage(), - builder: (context, snapshot) { - if (snapshot.hasData) { - final double imageAspectRatio = enteFile.width / enteFile.height; - final Image image = snapshot.data!; + const double viewWidth = 60; + const double viewHeight = 60; + return SizedBox( + width: viewWidth, + height: viewHeight, + child: FutureBuilder( + future: getImage(), + builder: (context, snapshot) { + if (snapshot.hasData) { + final double imageAspectRatio = enteFile.width / enteFile.height; + final Image image = snapshot.data!; - const double viewWidth = 60; - const double viewHeight = 60; + final faceBox = face.detection.box; - final faceBox = face.detection.box; + final double relativeFaceCenterX = faceBox.xMin + faceBox.width / 2; + final double relativeFaceCenterY = + faceBox.yMin + faceBox.height / 2; - final double relativeFaceCenterX = faceBox.xMin + faceBox.width / 2; - final double relativeFaceCenterY = faceBox.yMin + faceBox.height / 2; + const double desiredFaceHeightRelativeToWidget = 8 / 10; + final double scale = + (1 / faceBox.height) * desiredFaceHeightRelativeToWidget; - const double desiredFaceHeightRelativeToWidget = 8 / 10; - final double scale = - (1 / faceBox.height) * desiredFaceHeightRelativeToWidget; + const double widgetCenterX = viewWidth / 2; + const double widgetCenterY = viewHeight / 2; - const double widgetCenterX = viewWidth / 2; - const double widgetCenterY = viewHeight / 2; + const double widgetAspectRatio = viewWidth / viewHeight; + final double imageToWidgetRatio = + imageAspectRatio / widgetAspectRatio; - const double widgetAspectRatio = viewWidth / viewHeight; - final double imageToWidgetRatio = - imageAspectRatio / widgetAspectRatio; + double offsetX = + (widgetCenterX - relativeFaceCenterX * viewWidth) * scale; + double offsetY = + (widgetCenterY - relativeFaceCenterY * viewHeight) * scale; - double offsetX = - (widgetCenterX - relativeFaceCenterX * viewWidth) * scale; - double offsetY = - (widgetCenterY - relativeFaceCenterY * viewHeight) * scale; - - if (imageAspectRatio < widgetAspectRatio) { - // Landscape Image: Adjust offsetX more conservatively - offsetX = offsetX * imageToWidgetRatio; - } else { - // Portrait Image: Adjust offsetY more conservatively - offsetY = offsetY / imageToWidgetRatio; - } - return SizedBox( - width: viewWidth, - height: viewHeight, - child: ClipRRect( + if (imageAspectRatio < widgetAspectRatio) { + // Landscape Image: Adjust offsetX more conservatively + offsetX = offsetX * imageToWidgetRatio; + } else { + // Portrait Image: Adjust offsetY more conservatively + offsetY = offsetY / imageToWidgetRatio; + } + return ClipRRect( borderRadius: const BorderRadius.all(Radius.elliptical(16, 12)), child: Transform.translate( offset: Offset( @@ -86,17 +86,17 @@ class CroppedFaceImageView extends StatelessWidget { child: image, ), ), - ), - ); - } else { - if (snapshot.hasError) { - log('Error getting cover face for person: ${snapshot.error}'); + ); + } else { + if (snapshot.hasError) { + log('Error getting cover face for person: ${snapshot.error}'); + } + return ThumbnailWidget( + enteFile, + ); } - return ThumbnailWidget( - enteFile, - ); - } - }, + }, + ), ); }