From 1221b16c7f054a9f03da03a5a02decc225297cf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E9=94=8B?= <2535831261@qq.com> Date: Fri, 5 Jun 2026 16:26:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BD=95=E5=88=B6=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E7=9B=B8=E6=9C=BA=E9=A2=84=E8=A7=88=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=A2=84=E8=A7=88=E6=9C=AA?= =?UTF-8?q?=E5=B0=B1=E7=BB=AA=E6=97=B6=E7=9A=84=E9=94=99=E8=AF=AF=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=EF=BC=8C=E7=A1=AE=E4=BF=9D=E7=94=A8=E6=88=B7=E4=BD=93?= =?UTF-8?q?=E9=AA=8C=E6=9B=B4=E6=B5=81=E7=95=85=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/features/recording/pages/page_record.dart | 8 +++++++- .../view-model/view_model_recording.dart | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/features/recording/pages/page_record.dart b/lib/features/recording/pages/page_record.dart index c438ffa..3e54ad4 100644 --- a/lib/features/recording/pages/page_record.dart +++ b/lib/features/recording/pages/page_record.dart @@ -135,7 +135,13 @@ class _RecordingPageState extends ConsumerState { final result = await ref .read(recordingViewModelProvider.notifier) .ensureCameraAndMicrophonePermissions(); - if (result.allGranted) return true; + if (result.allGranted) { + final ready = ref.read(recordingViewModelProvider).session.isPreviewReady; + if (ready) return true; + if (!mounted) return false; + AppToast.show('相机预览启动失败,请重试'); + return false; + } if (!mounted) return false; await RecordDialog.showSingle( diff --git a/lib/features/recording/view-model/view_model_recording.dart b/lib/features/recording/view-model/view_model_recording.dart index 01429c3..2f6f8a9 100644 --- a/lib/features/recording/view-model/view_model_recording.dart +++ b/lib/features/recording/view-model/view_model_recording.dart @@ -280,6 +280,12 @@ class RecordingViewModel extends Notifier { _updateSession((s) => s.copyWith(isMicrophoneGranted: microphoneGranted)); + if (cameraGranted && !state.session.isPreviewReady) { + _updateSession((s) => s.copyWith(errorMessage: null)); + await _listenStatus(); + await restorePreview(); + } + return RecordingRequiredPermissions( cameraGranted: cameraGranted, microphoneGranted: microphoneGranted, @@ -293,9 +299,13 @@ class RecordingViewModel extends Notifier { /// 开始录制,可选开启勿扰模式。 Future startRecording({bool enableDoNotDisturb = true}) async { final session = state.session; - if (!session.isPreviewReady || - session.isRecording || - session.isStartingRecording) { + if (session.isRecording || session.isStartingRecording) { + return; + } + if (!session.isPreviewReady) { + _updateSession( + (s) => s.copyWith(errorMessage: '相机预览未就绪,请稍后重试'), + ); return; }