From 5371114e2128ffbadb60cb906973f81f16dac9a6 Mon Sep 17 00:00:00 2001 From: otsmr Date: Tue, 11 Nov 2025 00:05:59 +0100 Subject: [PATCH] fixing wide angle on ios --- .../zoom_selector.dart | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/src/views/camera/camera_preview_components/zoom_selector.dart b/lib/src/views/camera/camera_preview_components/zoom_selector.dart index 856224e..d5824b0 100644 --- a/lib/src/views/camera/camera_preview_components/zoom_selector.dart +++ b/lib/src/views/camera/camera_preview_components/zoom_selector.dart @@ -41,6 +41,7 @@ class _CameraZoomButtonsState extends State { bool showWideAngleZoom = false; bool showWideAngleZoomIOS = false; bool _isDisposed = false; + int? _wideCameraIndex; @override void initState() { @@ -51,7 +52,19 @@ class _CameraZoomButtonsState extends State { Future initAsync() async { showWideAngleZoom = (await widget.controller.getMinZoomLevel()) < 1; Log.info('Found ${gCameras.length} cameras for zoom.'); - if (!showWideAngleZoom && Platform.isIOS && gCameras.length == 3) { + + var index = + gCameras.indexWhere((t) => t.lensType == CameraLensType.ultraWide); + if (index == -1) { + index = gCameras.indexWhere( + (t) => t.lensType == CameraLensType.wide, + ); + } + if (index != -1) { + _wideCameraIndex = index; + } + + if (!showWideAngleZoom && Platform.isIOS && _wideCameraIndex != null) { showWideAngleZoomIOS = true; } if (_isDisposed) return; @@ -76,10 +89,12 @@ class _CameraZoomButtonsState extends State { const zoomTextStyle = TextStyle(fontSize: 13); final isSmallerFocused = widget.scaleFactor < 1 || - (showWideAngleZoomIOS && widget.selectedCameraDetails.cameraId == 2); + (showWideAngleZoomIOS && + widget.selectedCameraDetails.cameraId == _wideCameraIndex); final isMiddleFocused = widget.scaleFactor >= 1 && widget.scaleFactor < 2 && - !(showWideAngleZoomIOS && widget.selectedCameraDetails.cameraId == 2); + !(showWideAngleZoomIOS && + widget.selectedCameraDetails.cameraId == _wideCameraIndex); final maxLevel = max( min(widget.selectedCameraDetails.maxAvailableZoom, 2), @@ -106,7 +121,9 @@ class _CameraZoomButtonsState extends State { ), onPressed: () async { if (showWideAngleZoomIOS) { - await widget.selectCamera(2, true); + if (_wideCameraIndex != null) { + await widget.selectCamera(_wideCameraIndex!, true); + } } else { final level = await widget.controller.getMinZoomLevel(); widget.updateScaleFactor(level);