diff --git a/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved index d3d660d9..43ae5a0b 100644 --- a/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -14,8 +14,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/google/app-check.git", "state" : { - "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", - "version" : "11.2.0" + "revision" : "3e33dd27dd4c69bd81c7c81fe61d8ccf58846902", + "version" : "11.3.1" } }, { @@ -41,8 +41,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/googleads/google-ads-on-device-conversion-ios-sdk", "state" : { - "revision" : "9bfcc6cf435b2e7c5562c1900b8680c594fa9a64", - "version" : "3.6.0" + "revision" : "dc39082d8881109d35b94b1c122164c0e8d08a55", + "version" : "3.6.1" } }, { @@ -68,8 +68,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleUtilities.git", "state" : { - "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", - "version" : "8.1.0" + "revision" : "9f183ae842be978784f2963a343682e0c46d8fb3", + "version" : "8.1.2" } }, { @@ -86,8 +86,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/google/gtm-session-fetcher.git", "state" : { - "revision" : "c756a29784521063b6a1202907e2cc47f41b667c", - "version" : "4.5.0" + "revision" : "c0ac7575d70050c2973ba2318bd5af47f8e8153a", + "version" : "5.3.0" } }, { @@ -113,8 +113,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/firebase/nanopb.git", "state" : { - "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", - "version" : "2.30910.0" + "revision" : "3851d94a41890dea16dc3db34caf60e585cb4163", + "version" : "2.30910.1" } }, { @@ -122,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/PostHog/posthog-ios", "state" : { - "revision" : "179438b8e0c9a357ab0caf453577f766ffddbcb3", - "version" : "3.59.3" + "revision" : "19288ee2f0575606b4669b2abadda2c9db97c529", + "version" : "3.66.1" } }, { @@ -131,8 +131,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/google/promises.git", "state" : { - "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", - "version" : "2.4.0" + "revision" : "f4a19a3c313dc2616c70bb49d29a799fb16be837", + "version" : "2.4.1" } } ], diff --git a/lib/src/features/posting/providers/camera_provider.dart b/lib/src/features/posting/providers/camera_provider.dart index 1dbe38f4..6b33b07e 100644 --- a/lib/src/features/posting/providers/camera_provider.dart +++ b/lib/src/features/posting/providers/camera_provider.dart @@ -20,7 +20,7 @@ class Camera extends _$Camera { bool _wasDisposedByLifecycle = false; @override - FutureOr build() async { + FutureOr build(ResolutionPreset resolutionPreset) async { _logger = GetIt.instance().getLogger('Camera'); // Only dispose lifecycle listener when provider is permanently disposed @@ -110,7 +110,7 @@ class Camera extends _$Camera { final controller = CameraController( camera, - ResolutionPreset.max, + resolutionPreset, imageFormatGroup: ImageFormatGroup.jpeg, ); diff --git a/lib/src/features/posting/ui/pages/recording_page.dart b/lib/src/features/posting/ui/pages/recording_page.dart index 81fdfe3e..888ae512 100644 --- a/lib/src/features/posting/ui/pages/recording_page.dart +++ b/lib/src/features/posting/ui/pages/recording_page.dart @@ -65,6 +65,13 @@ class _RecordingPageState extends ConsumerState { int _guideAudioPrepareRequestId = 0; int _soundPickerSessionId = 0; + ResolutionPreset get _cameraResolutionPreset => + widget.captureMode == CaptureMode.videoOnly + ? ResolutionPreset.veryHigh + : ResolutionPreset.max; + + CameraProvider get _cameraProvider => cameraProvider(_cameraResolutionPreset); + @override void initState() { super.initState(); @@ -99,13 +106,13 @@ class _RecordingPageState extends ConsumerState { } bool _hasCameras() { - final cameraAsync = ref.read(cameraProvider); + final cameraAsync = ref.read(_cameraProvider); final cameraState = cameraAsync.value; return cameraState != null && cameraState.cameras.isNotEmpty; } bool _isCameraReady() { - final cameraAsync = ref.read(cameraProvider); + final cameraAsync = ref.read(_cameraProvider); if (cameraAsync.hasError) return false; final cameraState = cameraAsync.value; return cameraState != null && @@ -167,7 +174,7 @@ class _RecordingPageState extends ConsumerState { Future _takePhoto() async { if (_isProcessing) return; - final cameraNotifier = ref.read(cameraProvider.notifier); + final cameraNotifier = ref.read(_cameraProvider.notifier); setState(() { _isProcessing = true; }); @@ -238,7 +245,7 @@ class _RecordingPageState extends ConsumerState { setState(() { _isProcessing = false; }); - await ref.read(cameraProvider.notifier).reinitializeCamera(); + await ref.read(_cameraProvider.notifier).reinitializeCamera(); } catch (e, stackTrace) { _logger.e( 'Error processing multiple photos', @@ -322,7 +329,7 @@ class _RecordingPageState extends ConsumerState { _isProcessing = false; }); // Reinitialize camera after returning from editor - ref.read(cameraProvider.notifier).reinitializeCamera(); + ref.read(_cameraProvider.notifier).reinitializeCamera(); } } catch (e, stackTrace) { _logger.e('Error processing photo', error: e, stackTrace: stackTrace); @@ -356,7 +363,7 @@ class _RecordingPageState extends ConsumerState { !recordingState.hasSegments && recordingState.elapsedDuration == Duration.zero; - final cameraNotifier = ref.read(cameraProvider.notifier); + final cameraNotifier = ref.read(_cameraProvider.notifier); final recordingNotifier = ref.read(recordingProvider.notifier); setState(() { @@ -430,7 +437,7 @@ class _RecordingPageState extends ConsumerState { _isProcessing = true; }); - final cameraNotifier = ref.read(cameraProvider.notifier); + final cameraNotifier = ref.read(_cameraProvider.notifier); final recordingNotifier = ref.read(recordingProvider.notifier) ..stopRecording(); unawaited(_pauseSelectedSoundGuide()); @@ -536,7 +543,7 @@ class _RecordingPageState extends ConsumerState { }); } - final cameraNotifier = ref.read(cameraProvider.notifier); + final cameraNotifier = ref.read(_cameraProvider.notifier); await cameraNotifier.disposeCamera(); if (!mounted || !context.mounted) return; @@ -650,7 +657,7 @@ class _RecordingPageState extends ConsumerState { } Future _handleFlipCamera() async { - final cameraNotifier = ref.read(cameraProvider.notifier); + final cameraNotifier = ref.read(_cameraProvider.notifier); await cameraNotifier.flipCamera(); } @@ -849,7 +856,7 @@ class _RecordingPageState extends ConsumerState { @override Widget build(BuildContext context) { - final cameraAsync = ref.watch(cameraProvider); + final cameraAsync = ref.watch(_cameraProvider); final recordingState = ref.watch(recordingProvider); if (recordingState.hasReachedMaxDuration &&