兼容 IOS 端

This commit is contained in:
2026-06-08 08:53:49 +08:00
parent e1446337e9
commit 551d10dec4
6 changed files with 184 additions and 82 deletions

View File

@@ -31,6 +31,19 @@ enum ClipboardReadResult {
invalid,
}
List<Permission> recordingGalleryPermissionsForHost({
required bool isIOS,
required bool isAndroid,
}) {
if (isIOS) {
return [Permission.photosAddOnly];
}
if (isAndroid) {
return [Permission.videos, Permission.storage];
}
return const [];
}
/// 开始录制所需的相机/麦克风权限检测结果。
class RecordingRequiredPermissions {
const RecordingRequiredPermissions({
@@ -221,7 +234,9 @@ class RecordingViewModel extends Notifier<RecordingModel> {
Future<void> restorePreview() async {
if (!RecordingPlatform.isSupported) return;
_updateSession((s) => s.copyWith(isPreviewReady: false, errorMessage: null));
_updateSession(
(s) => s.copyWith(isPreviewReady: false, errorMessage: null),
);
try {
final status = await _initializePreviewWithRetry();
_updateSession(
@@ -245,13 +260,10 @@ class RecordingViewModel extends Notifier<RecordingModel> {
/// 当前平台所需的相册/视频保存权限列表。
List<Permission> _galleryPermissions() {
if (Platform.isIOS) {
return [Permission.photosAddOnly, Permission.photos];
}
if (Platform.isAndroid) {
return [Permission.videos, Permission.storage];
}
return const [];
return recordingGalleryPermissionsForHost(
isIOS: Platform.isIOS,
isAndroid: Platform.isAndroid,
);
}
/// 判断相册相关权限是否至少有一项已授予。
@@ -267,7 +279,8 @@ class RecordingViewModel extends Notifier<RecordingModel> {
}
/// 检测并尝试申请相机、麦克风权限,同步更新 session 中的 isMicrophoneGranted。
Future<RecordingRequiredPermissions> ensureCameraAndMicrophonePermissions() async {
Future<RecordingRequiredPermissions>
ensureCameraAndMicrophonePermissions() async {
final permissions = await PermissionService.requestMissing([
Permission.camera,
Permission.microphone,
@@ -303,9 +316,7 @@ class RecordingViewModel extends Notifier<RecordingModel> {
return;
}
if (!session.isPreviewReady) {
_updateSession(
(s) => s.copyWith(errorMessage: '相机预览未就绪,请稍后重试'),
);
_updateSession((s) => s.copyWith(errorMessage: '相机预览未就绪,请稍后重试'));
return;
}