From 1e936bfc127e89df7db56e9a6835cdb218c8ff50 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 11:44:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0pubspec=E3=80=82=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=90=AF=E5=8A=A8=E5=B1=8F=E5=B9=95=E7=9A=84=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=90=8E=E5=8F=B0XML=EF=BC=8C=E5=B9=B6=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=88=A0=E9=99=A4=E8=BF=87=E6=97=B6=E7=9A=84=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=92=8C=E5=A2=9E=E5=BC=BA=E4=BC=9A=E8=AF=9D=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=9D=A5=E9=87=8D=E6=9E=84=E8=AE=B0=E5=BD=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/drawable-v21/launch_background.xml | 12 +- .../main/res/drawable/launch_background.xml | 12 +- assets/images/image_dialog_bg.png | Bin 0 -> 121528 bytes assets/images/image_logo.png | Bin 0 -> 9065 bytes lib/app/app.dart | 4 +- .../recording/model/model_recording.dart | 9 + .../model/model_recording_session.dart | 82 +++++ .../page_record.dart} | 76 ++-- .../recording_session_controller.dart | 330 ------------------ .../view-model/view_model_recording.dart | 284 ++++++++++++++- lib/gen/assets.gen.dart | 121 +++++++ pubspec.yaml | 11 + .../recording/view_model_recording_test.dart | 13 + 13 files changed, 567 insertions(+), 387 deletions(-) create mode 100644 assets/images/image_dialog_bg.png create mode 100644 assets/images/image_logo.png create mode 100644 lib/features/recording/model/model_recording_session.dart rename lib/features/recording/{recording_page.dart => pages/page_record.dart} (89%) delete mode 100644 lib/features/recording/recording_session_controller.dart create mode 100644 lib/gen/assets.gen.dart diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml index f74085f..3ddae0d 100644 --- a/android/app/src/main/res/drawable-v21/launch_background.xml +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -1,12 +1,8 @@ - - - - - + android:gravity="fill" + android:src="@drawable/startup_background" /> + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml index 304732f..3ddae0d 100644 --- a/android/app/src/main/res/drawable/launch_background.xml +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -1,12 +1,8 @@ - - - - - + android:gravity="fill" + android:src="@drawable/startup_background" /> + diff --git a/assets/images/image_dialog_bg.png b/assets/images/image_dialog_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..1096831038efc1eb706701e766cecb781832e88a GIT binary patch literal 121528 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 bK~w_(@*pq01&jp#00000NkvXXu0mjfQ?QH| literal 0 HcmV?d00001 diff --git a/lib/app/app.dart b/lib/app/app.dart index 271fb18..fe0d984 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -3,12 +3,12 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:recording_tool/app/config/app_config.dart'; import 'package:recording_tool/app/router/app_navigator.dart'; import 'package:recording_tool/app/theme/app_theme.dart'; -import 'package:recording_tool/features/recording/recording_page.dart'; +import 'package:recording_tool/features/recording/pages/page_record.dart'; import 'package:recording_tool/features/recording/view-model/view_model_recording.dart'; -import 'package:pull_to_refresh/pull_to_refresh.dart'; class FlutterTemplateApp extends ConsumerStatefulWidget { const FlutterTemplateApp({super.key}); diff --git a/lib/features/recording/model/model_recording.dart b/lib/features/recording/model/model_recording.dart index e137f26..8d29388 100644 --- a/lib/features/recording/model/model_recording.dart +++ b/lib/features/recording/model/model_recording.dart @@ -1,4 +1,5 @@ import 'package:recording_tool/features/recording/model/model_clipboard.dart'; +import 'package:recording_tool/features/recording/model/model_recording_session.dart'; class RecordingModel { /// 剪切板内容 @@ -7,11 +8,17 @@ class RecordingModel { /// 剪切板是否包含有效的小程序录制信息 final bool hasValidClipboardInfo; + /// 录制会话状态 + final RecordingSessionState session; + RecordingModel({ required this.clipboardRecordingModel, this.hasValidClipboardInfo = false, + this.session = const RecordingSessionState(), }); + bool get isRecording => session.isRecording; + factory RecordingModel.fromJson(Map json) { return RecordingModel( clipboardRecordingModel: ClipboardRecordingModel.fromJson( @@ -32,12 +39,14 @@ class RecordingModel { RecordingModel copyWith({ ClipboardRecordingModel? clipboardRecordingModel, bool? hasValidClipboardInfo, + RecordingSessionState? session, }) { return RecordingModel( clipboardRecordingModel: clipboardRecordingModel ?? this.clipboardRecordingModel, hasValidClipboardInfo: hasValidClipboardInfo ?? this.hasValidClipboardInfo, + session: session ?? this.session, ); } } diff --git a/lib/features/recording/model/model_recording_session.dart b/lib/features/recording/model/model_recording_session.dart new file mode 100644 index 0000000..8284498 --- /dev/null +++ b/lib/features/recording/model/model_recording_session.dart @@ -0,0 +1,82 @@ +import 'package:recording_tool/features/recording/recording_platform.dart'; + +/// 录制会话状态(相机预览、权限、录制进度等)。 +class RecordingSessionState { + const RecordingSessionState({ + this.status = const RecordingStatus(state: RecordingState.idle), + this.isTouchLocked = true, + this.isPreviewReady = false, + this.isStartingRecording = false, + this.hasDndAccess = false, + this.isBatteryOptimizedIgnored = true, + this.notificationsGranted = true, + this.isMicrophoneGranted = false, + this.lastOutputPath, + this.lastSavedDisplayName, + this.errorMessage, + this.permissionWarning, + this.gallerySaveFailed = false, + }); + + final RecordingStatus status; + final bool isTouchLocked; + final bool isPreviewReady; + final bool isStartingRecording; + final bool hasDndAccess; + final bool isBatteryOptimizedIgnored; + final bool notificationsGranted; + final bool isMicrophoneGranted; + final String? lastOutputPath; + final String? lastSavedDisplayName; + final String? errorMessage; + final String? permissionWarning; + final bool gallerySaveFailed; + + bool get isRecording => status.isRecording; + + String get elapsedLabel { + final totalSeconds = status.elapsedMillis ~/ 1000; + final minutes = (totalSeconds ~/ 60).toString().padLeft(2, '0'); + final seconds = (totalSeconds % 60).toString().padLeft(2, '0'); + return '$minutes:$seconds'; + } + + RecordingSessionState copyWith({ + RecordingStatus? status, + bool? isTouchLocked, + bool? isPreviewReady, + bool? isStartingRecording, + bool? hasDndAccess, + bool? isBatteryOptimizedIgnored, + bool? notificationsGranted, + bool? isMicrophoneGranted, + String? lastOutputPath, + String? lastSavedDisplayName, + String? errorMessage, + String? permissionWarning, + bool? gallerySaveFailed, + bool clearPermissionWarning = false, + bool clearLastSaved = false, + }) { + return RecordingSessionState( + status: status ?? this.status, + isTouchLocked: isTouchLocked ?? this.isTouchLocked, + isPreviewReady: isPreviewReady ?? this.isPreviewReady, + isStartingRecording: isStartingRecording ?? this.isStartingRecording, + hasDndAccess: hasDndAccess ?? this.hasDndAccess, + isBatteryOptimizedIgnored: + isBatteryOptimizedIgnored ?? this.isBatteryOptimizedIgnored, + notificationsGranted: notificationsGranted ?? this.notificationsGranted, + isMicrophoneGranted: isMicrophoneGranted ?? this.isMicrophoneGranted, + lastOutputPath: lastOutputPath ?? this.lastOutputPath, + lastSavedDisplayName: clearLastSaved + ? null + : (lastSavedDisplayName ?? this.lastSavedDisplayName), + errorMessage: errorMessage, + permissionWarning: clearPermissionWarning + ? null + : (permissionWarning ?? this.permissionWarning), + gallerySaveFailed: gallerySaveFailed ?? this.gallerySaveFailed, + ); + } +} diff --git a/lib/features/recording/recording_page.dart b/lib/features/recording/pages/page_record.dart similarity index 89% rename from lib/features/recording/recording_page.dart rename to lib/features/recording/pages/page_record.dart index b266fc1..53160c1 100644 --- a/lib/features/recording/recording_page.dart +++ b/lib/features/recording/pages/page_record.dart @@ -10,19 +10,21 @@ import 'package:recording_tool/core/platform/app_platform_info.dart'; import 'package:recording_tool/core/platform/device_health_checker.dart'; import 'package:recording_tool/core/utils/date_time_formatter.dart'; import 'package:recording_tool/features/recording/model/model_recording.dart'; +import 'package:recording_tool/features/recording/model/model_recording_session.dart'; import 'package:recording_tool/features/recording/recording_display_name.dart'; import 'package:recording_tool/features/recording/recording_platform.dart'; -import 'package:recording_tool/features/recording/recording_session_controller.dart'; import 'package:recording_tool/features/recording/view-model/view_model_recording.dart'; import 'package:recording_tool/features/recording/widgets/camera_preview_widget.dart'; import 'package:recording_tool/features/recording/widgets/recording_saved_dialog.dart'; import 'package:recording_tool/features/recording/widgets/recording_touch_lock_overlay.dart'; import 'package:recording_tool/shared/widgets/widgets.dart'; +/// 录制页入口 class RecordingPage extends ConsumerStatefulWidget { const RecordingPage({super.key}); @override + /// 创建页面状态 ConsumerState createState() => _RecordingPageState(); } @@ -30,11 +32,13 @@ class _RecordingPageState extends ConsumerState { var _immersiveApplied = false; @override + /// 首帧后初始化录制流程 void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) => _bootstrap()); } + /// 检查设备健康状态并弹窗提示 Future _checkAndShowDeviceHealthAlerts() async { final snapshot = await AppPlatformInfo.deviceHealth(); if (!mounted) return; @@ -45,6 +49,7 @@ class _RecordingPageState extends ConsumerState { await AppDialog.deviceHealthAlert(context, lines: lines); } + /// 页面启动:健康检查、读剪贴板、进入录制模式、准备相机会话 Future _bootstrap() async { await _checkAndShowDeviceHealthAlerts(); if (!mounted) return; @@ -60,11 +65,10 @@ class _RecordingPageState extends ConsumerState { // Allow PlatformView to attach before binding CameraX preview. await Future.delayed(const Duration(milliseconds: 400)); if (!mounted) return; - await ref - .read(recordingSessionControllerProvider.notifier) - .prepareSession(); + await ref.read(recordingViewModelProvider.notifier).prepareSession(); } + /// Android 进入沉浸式全屏 Future _enterRecordingMode() async { if (!Platform.isAndroid) return; await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky); @@ -72,6 +76,7 @@ class _RecordingPageState extends ConsumerState { _immersiveApplied = true; } + /// 解析保存成功弹窗的标题文案 String _savedDialogSessionTitle( RecordingModel recordingInfo, String? savedName, @@ -87,6 +92,7 @@ class _RecordingPageState extends ConsumerState { return '录制完成'; } + /// 无选手信息时弹窗提示 Future _showNoPlayerInfoDialog() { return showDialog( context: context, @@ -104,6 +110,7 @@ class _RecordingPageState extends ConsumerState { ); } + /// 点击开始录制:校验剪贴板与健康状态 Future _onStartRecording() async { final recordingInfo = ref.read(recordingViewModelProvider); if (!recordingInfo.hasClipboardFilename) { @@ -112,23 +119,24 @@ class _RecordingPageState extends ConsumerState { } await _checkAndShowDeviceHealthAlerts(); if (!mounted) return; - await ref.read(recordingSessionControllerProvider.notifier).startRecording(); + await ref.read(recordingViewModelProvider.notifier).startRecording(); } + /// 清空剪贴板信息,准备新一轮录制 void _clearClipboardForNewRound() { - ref.read(recordingViewModelProvider.notifier).resetClipboardInfo(); - ref - .read(recordingSessionControllerProvider.notifier) - .clearSavedRecordingResult(); + final notifier = ref.read(recordingViewModelProvider.notifier); + notifier.resetClipboardInfo(); + notifier.clearSavedRecordingResult(); } + /// 保存成功后按需弹出完成对话框 Future _showRecordingSavedDialogIfNeeded() async { - final session = ref.read(recordingSessionControllerProvider); + final recordingInfo = ref.read(recordingViewModelProvider); + final session = recordingInfo.session; if (session.lastSavedDisplayName == null || session.gallerySaveFailed) { return; } - final recordingInfo = ref.read(recordingViewModelProvider); final sessionTitle = _savedDialogSessionTitle( recordingInfo, session.lastSavedDisplayName, @@ -139,16 +147,17 @@ class _RecordingPageState extends ConsumerState { sessionTitle: sessionTitle, onContinueRound: () { ref - .read(recordingSessionControllerProvider.notifier) + .read(recordingViewModelProvider.notifier) .clearSavedRecordingResult(); }, onRecordNewRound: _clearClipboardForNewRound, ); } + /// 退出沉浸式并释放录制会话 Future _exitRecordingMode() async { if (!_immersiveApplied) return; - await ref.read(recordingSessionControllerProvider.notifier).teardown(); + await ref.read(recordingViewModelProvider.notifier).teardown(); await SystemChrome.setEnabledSystemUIMode( SystemUiMode.manual, overlays: SystemUiOverlay.values, @@ -158,6 +167,7 @@ class _RecordingPageState extends ConsumerState { } @override + /// 页面销毁时恢复系统 UI void dispose() { if (_immersiveApplied) { SystemChrome.setEnabledSystemUIMode( @@ -170,10 +180,11 @@ class _RecordingPageState extends ConsumerState { } @override + /// 构建录制页 UI Widget build(BuildContext context) { - final state = ref.watch(recordingSessionControllerProvider); final recordingInfo = ref.watch(recordingViewModelProvider); - final controller = ref.read(recordingSessionControllerProvider.notifier); + final state = recordingInfo.session; + final viewModel = ref.read(recordingViewModelProvider.notifier); final clipboard = recordingInfo.clipboardRecordingModel; final showClipboardInfo = recordingInfo.hasValidClipboardInfo; @@ -199,7 +210,7 @@ class _RecordingPageState extends ConsumerState { if (state.isTouchLocked && state.isRecording) RecordingTouchLockOverlay( enabled: true, - onUnlocked: () => controller.setTouchLocked(false), + onUnlocked: () => viewModel.setTouchLocked(false), ), _RecordingHud( state: state, @@ -219,9 +230,9 @@ class _RecordingPageState extends ConsumerState { }, onStart: _onStartRecording, onStop: () async { - await controller.stopRecording(); + await viewModel.stopRecording(); if (!context.mounted) return; - final latest = ref.read(recordingSessionControllerProvider); + final latest = ref.read(recordingViewModelProvider).session; if (latest.gallerySaveFailed) { AppToast.show(latest.errorMessage ?? '保存到相册失败,请开启相册权限'); return; @@ -229,15 +240,15 @@ class _RecordingPageState extends ConsumerState { await _showRecordingSavedDialogIfNeeded(); }, onOpenDnd: () async { - await controller.openDndSettings(); - await controller.refreshDndAccess(); + await viewModel.openDndSettings(); + await viewModel.refreshDndAccess(); }, onOpenBattery: () async { - await controller.openBatterySettings(); - await controller.refreshBatteryOptimization(); + await viewModel.openBatterySettings(); + await viewModel.refreshBatteryOptimization(); }, onToggleTouchLock: () { - controller.setTouchLocked(!state.isTouchLocked); + viewModel.setTouchLocked(!state.isTouchLocked); }, ), if (state.isStartingRecording) @@ -249,12 +260,14 @@ class _RecordingPageState extends ConsumerState { } } +/// 录制加载遮罩(相机启动/开始录制) class _RecordingLoadingOverlay extends StatelessWidget { const _RecordingLoadingOverlay({required this.message}); final String message; @override + /// 显示加载动画与提示文案 Widget build(BuildContext context) { return ColoredBox( color: Colors.black, @@ -281,6 +294,7 @@ class _RecordingLoadingOverlay extends StatelessWidget { } } +/// 录制页 HUD 层(赛事信息、控制按钮、状态提示) class _RecordingHud extends StatelessWidget { const _RecordingHud({ required this.state, @@ -310,14 +324,17 @@ class _RecordingHud extends StatelessWidget { final VoidCallback onOpenBattery; final VoidCallback onToggleTouchLock; + /// 叠加层文字样式 static TextStyle get _overlayTextStyle => TextStyle( color: Colors.white, shadows: [Shadow(color: Colors.black54, blurRadius: 6.r)], ); + /// 底部控制区左右占位宽度 static double get _controlSlotWidth => 48.r; @override + /// 构建 HUD 布局 Widget build(BuildContext context) { final showPasteEventInfo = eventTitle == null && !state.isRecording; @@ -541,6 +558,7 @@ class _RecordingHud extends StatelessWidget { } } +/// 权限与剪贴板相关设置提示条 class _SetupHints extends StatelessWidget { const _SetupHints({ required this.hasDndAccess, @@ -563,6 +581,7 @@ class _SetupHints extends StatelessWidget { final VoidCallback onOpenNotificationSettings; @override + /// 按需展示权限/剪贴板提示 Widget build(BuildContext context) { final showPermissionHints = !hasDndAccess || !isBatteryIgnored || !notificationsGranted; @@ -598,20 +617,24 @@ class _SetupHints extends StatelessWidget { } } +/// 显示剪贴板地址与实时时钟的提示芯片 class _ClipboardAddressClockChip extends StatefulWidget { const _ClipboardAddressClockChip({required this.address}); final String address; @override + /// 创建芯片状态 State<_ClipboardAddressClockChip> createState() => _ClipboardAddressClockChipState(); } -class _ClipboardAddressClockChipState extends State<_ClipboardAddressClockChip> { +class _ClipboardAddressClockChipState + extends State<_ClipboardAddressClockChip> { Timer? _clockTimer; @override + /// 启动每秒刷新时钟 void initState() { super.initState(); _clockTimer = Timer.periodic(const Duration(seconds: 1), (_) { @@ -620,12 +643,14 @@ class _ClipboardAddressClockChipState extends State<_ClipboardAddressClockChip> } @override + /// 取消定时器 void dispose() { _clockTimer?.cancel(); _clockTimer = null; super.dispose(); } + /// 拼接地址与当前时间文本 String _buildLabel() { final nowText = DateTimeFormatter.format( DateTime.now(), @@ -636,11 +661,13 @@ class _ClipboardAddressClockChipState extends State<_ClipboardAddressClockChip> } @override + /// 渲染时钟芯片 Widget build(BuildContext context) { return _HintChip(label: _buildLabel(), onTap: () {}); } } +/// 可点击的提示条组件 class _HintChip extends StatelessWidget { const _HintChip({required this.label, required this.onTap}); @@ -648,6 +675,7 @@ class _HintChip extends StatelessWidget { final VoidCallback onTap; @override + /// 构建提示条 UI Widget build(BuildContext context) { return GestureDetector( onTap: onTap, diff --git a/lib/features/recording/recording_session_controller.dart b/lib/features/recording/recording_session_controller.dart deleted file mode 100644 index 91daaaf..0000000 --- a/lib/features/recording/recording_session_controller.dart +++ /dev/null @@ -1,330 +0,0 @@ -import 'dart:async'; -import 'dart:io'; - -import 'package:flutter/services.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:recording_tool/core/permission/permission_service.dart'; -import 'package:recording_tool/core/utils/rate_limiter.dart'; -import 'package:recording_tool/features/recording/recording_display_name.dart'; -import 'package:recording_tool/features/recording/recording_platform.dart'; -import 'package:recording_tool/features/recording/view-model/view_model_recording.dart'; -import 'package:permission_handler/permission_handler.dart'; - -class RecordingSessionState { - const RecordingSessionState({ - this.status = const RecordingStatus(state: RecordingState.idle), - this.isTouchLocked = true, - this.isPreviewReady = false, - this.isStartingRecording = false, - this.hasDndAccess = false, - this.isBatteryOptimizedIgnored = true, - this.notificationsGranted = true, - this.isMicrophoneGranted = false, - this.lastOutputPath, - this.lastSavedDisplayName, - this.errorMessage, - this.permissionWarning, - this.gallerySaveFailed = false, - }); - - final RecordingStatus status; - final bool isTouchLocked; - final bool isPreviewReady; - final bool isStartingRecording; - final bool hasDndAccess; - final bool isBatteryOptimizedIgnored; - final bool notificationsGranted; - final bool isMicrophoneGranted; - final String? lastOutputPath; - final String? lastSavedDisplayName; - final String? errorMessage; - final String? permissionWarning; - final bool gallerySaveFailed; - - bool get isRecording => status.isRecording; - - String get elapsedLabel { - final totalSeconds = status.elapsedMillis ~/ 1000; - final minutes = (totalSeconds ~/ 60).toString().padLeft(2, '0'); - final seconds = (totalSeconds % 60).toString().padLeft(2, '0'); - return '$minutes:$seconds'; - } - - RecordingSessionState copyWith({ - RecordingStatus? status, - bool? isTouchLocked, - bool? isPreviewReady, - bool? isStartingRecording, - bool? hasDndAccess, - bool? isBatteryOptimizedIgnored, - bool? notificationsGranted, - bool? isMicrophoneGranted, - String? lastOutputPath, - String? lastSavedDisplayName, - String? errorMessage, - String? permissionWarning, - bool? gallerySaveFailed, - bool clearPermissionWarning = false, - bool clearLastSaved = false, - }) { - return RecordingSessionState( - status: status ?? this.status, - isTouchLocked: isTouchLocked ?? this.isTouchLocked, - isPreviewReady: isPreviewReady ?? this.isPreviewReady, - isStartingRecording: isStartingRecording ?? this.isStartingRecording, - hasDndAccess: hasDndAccess ?? this.hasDndAccess, - isBatteryOptimizedIgnored: - isBatteryOptimizedIgnored ?? this.isBatteryOptimizedIgnored, - notificationsGranted: notificationsGranted ?? this.notificationsGranted, - isMicrophoneGranted: isMicrophoneGranted ?? this.isMicrophoneGranted, - lastOutputPath: lastOutputPath ?? this.lastOutputPath, - lastSavedDisplayName: clearLastSaved - ? null - : (lastSavedDisplayName ?? this.lastSavedDisplayName), - errorMessage: errorMessage, - permissionWarning: clearPermissionWarning - ? null - : (permissionWarning ?? this.permissionWarning), - gallerySaveFailed: gallerySaveFailed ?? this.gallerySaveFailed, - ); - } -} - -final recordingSessionControllerProvider = - NotifierProvider( - RecordingSessionController.new, - ); - -class RecordingSessionController extends Notifier { - static const Duration _recordingActionInterval = Duration(milliseconds: 300); - static const Object _startRecordingThrottleKey = 'recording.session.start'; - static const Object _stopRecordingThrottleKey = 'recording.session.stop'; - - StreamSubscription? _statusSubscription; - final _rateLimit = RateLimitHub(); - - @override - RecordingSessionState build() { - ref.onDispose(_dispose); - return const RecordingSessionState(); - } - - Future prepareSession() async { - if (!RecordingPlatform.isSupported) { - state = state.copyWith(errorMessage: '当前设备不支持录制'); - return; - } - - final permissions = await PermissionService.requestMissing([ - Permission.camera, - Permission.microphone, - if (Platform.isAndroid) Permission.notification, - ..._galleryPermissions(), - ]); - - final cameraGranted = permissions[Permission.camera]?.isGranted ?? false; - if (!cameraGranted) { - state = state.copyWith(errorMessage: '需要相机权限才能录制'); - return; - } - - final microphoneGranted = - permissions[Permission.microphone]?.isGranted ?? false; - final notificationsGranted = Platform.isAndroid - ? (permissions[Permission.notification]?.isGranted ?? false) - : true; - - final warnings = []; - if (Platform.isAndroid && !notificationsGranted) { - warnings.add('未授予通知权限,录制时可能看不到前台服务通知,系统更容易结束后台录制'); - } - if (!microphoneGranted) { - warnings.add('未授予麦克风权限,当前将以静音模式录制'); - } - if (!_isGalleryPermissionGranted(permissions)) { - warnings.add('未授予相册权限,录制结束后可能无法保存到相册'); - } - - final hasDnd = await RecordingPlatform.hasNotificationPolicyAccess(); - final batteryIgnored = - await RecordingPlatform.isIgnoringBatteryOptimizations(); - - state = state.copyWith( - hasDndAccess: hasDnd, - isBatteryOptimizedIgnored: batteryIgnored, - isMicrophoneGranted: microphoneGranted, - notificationsGranted: notificationsGranted, - permissionWarning: warnings.isEmpty ? null : warnings.join('\n'), - errorMessage: null, - clearPermissionWarning: warnings.isEmpty, - ); - - await _listenStatus(); - try { - final status = await _initializePreviewWithRetry(); - state = state.copyWith( - status: status, - isPreviewReady: status.state == RecordingState.previewing, - errorMessage: status.state == RecordingState.previewing - ? null - : (status.message ?? '相机预览初始化失败'), - ); - } on PlatformException catch (error) { - state = state.copyWith( - isPreviewReady: false, - errorMessage: error.message ?? '相机预览初始化失败', - ); - } - } - - Future _initializePreviewWithRetry() async { - const maxAttempts = 8; - for (var attempt = 0; attempt < maxAttempts; attempt++) { - try { - return await RecordingPlatform.initializePreview(); - } on PlatformException catch (error) { - final shouldRetry = - error.code == 'NO_PREVIEW' && attempt < maxAttempts - 1; - if (!shouldRetry) { - rethrow; - } - await Future.delayed(Duration(milliseconds: 150 * (attempt + 1))); - } - } - throw StateError('initializePreview retry exhausted'); - } - - List _galleryPermissions() { - if (Platform.isIOS) { - return [Permission.photosAddOnly, Permission.photos]; - } - if (Platform.isAndroid) { - return [Permission.videos, Permission.storage]; - } - return const []; - } - - bool _isGalleryPermissionGranted(Map permissions) { - for (final permission in _galleryPermissions()) { - if (permissions[permission]?.isGranted ?? false) { - return true; - } - } - return _galleryPermissions().isEmpty; - } - - bool _tryAcquireRecordingAction(Object key) { - var executed = false; - _rateLimit.throttle( - key: key, - value: null, - duration: _recordingActionInterval, - options: const ThrottleOptions(leading: true, trailing: false), - onCallback: (_) => executed = true, - ); - return executed; - } - - Future startRecording({bool enableDoNotDisturb = true}) async { - if (!_tryAcquireRecordingAction(_startRecordingThrottleKey)) return; - - if (!state.isPreviewReady || - state.isRecording || - state.isStartingRecording) { - return; - } - - final clipboard = ref.read(recordingViewModelProvider).clipboardRecordingModel; - final displayName = recordingFileNameForPlatform(clipboard.filename); - - state = state.copyWith(isStartingRecording: true, errorMessage: null); - try { - final result = await RecordingPlatform.startRecording( - enableDoNotDisturb: enableDoNotDisturb && state.hasDndAccess, - displayName: displayName, - ); - state = state.copyWith( - status: result.status, - lastOutputPath: result.outputPath, - isTouchLocked: true, - errorMessage: null, - gallerySaveFailed: false, - clearLastSaved: true, - ); - } on PlatformException catch (error) { - state = state.copyWith(errorMessage: error.message ?? '开始录制失败'); - } finally { - state = state.copyWith(isStartingRecording: false); - } - } - - Future stopRecording() async { - if (!_tryAcquireRecordingAction(_stopRecordingThrottleKey)) return; - - if (!state.isRecording) return; - - try { - final result = await RecordingPlatform.stopRecording(); - final galleryFailed = !result.gallerySaved; - final savedName = recordingFileNameForPlatform( - ref.read(recordingViewModelProvider).clipboardRecordingModel.filename, - ); - state = state.copyWith( - status: result.status, - lastOutputPath: result.outputPath ?? state.lastOutputPath, - lastSavedDisplayName: galleryFailed ? null : savedName, - errorMessage: galleryFailed - ? (result.galleryErrorMessage ?? '保存到相册失败,请开启相册权限') - : null, - gallerySaveFailed: galleryFailed, - ); - } on PlatformException catch (error) { - state = state.copyWith(errorMessage: error.message ?? '停止录制失败'); - } - } - - void setTouchLocked(bool locked) { - state = state.copyWith(isTouchLocked: locked); - } - - void clearSavedRecordingResult() { - state = state.copyWith(clearLastSaved: true); - } - - Future openDndSettings() => - RecordingPlatform.openNotificationPolicySettings(); - - Future refreshDndAccess() async { - final hasDnd = await RecordingPlatform.hasNotificationPolicyAccess(); - state = state.copyWith(hasDndAccess: hasDnd); - } - - Future openBatterySettings() => - RecordingPlatform.openBatteryOptimizationSettings(); - - Future refreshBatteryOptimization() async { - final ignored = await RecordingPlatform.isIgnoringBatteryOptimizations(); - state = state.copyWith(isBatteryOptimizedIgnored: ignored); - } - - Future teardown() async { - await RecordingPlatform.setImmersiveMode(enabled: false); - await RecordingPlatform.disableDoNotDisturb(); - await RecordingPlatform.disposePreview(); - await _statusSubscription?.cancel(); - _statusSubscription = null; - state = const RecordingSessionState(); - } - - Future _listenStatus() async { - await _statusSubscription?.cancel(); - _statusSubscription = RecordingPlatform.statusStream().listen((status) { - state = state.copyWith(status: status); - }); - } - - Future _dispose() async { - _rateLimit.clear(); - await _statusSubscription?.cancel(); - } -} diff --git a/lib/features/recording/view-model/view_model_recording.dart b/lib/features/recording/view-model/view_model_recording.dart index b30a1dc..5e1fb0f 100644 --- a/lib/features/recording/view-model/view_model_recording.dart +++ b/lib/features/recording/view-model/view_model_recording.dart @@ -1,16 +1,23 @@ +import 'dart:async'; import 'dart:convert'; +import 'dart:io'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_riverpod/legacy.dart'; +import 'package:permission_handler/permission_handler.dart'; import 'package:recording_tool/core/logging/app_logger.dart'; +import 'package:recording_tool/core/permission/permission_service.dart'; +import 'package:recording_tool/core/utils/rate_limiter.dart'; import 'package:recording_tool/features/recording/model/model_clipboard.dart'; import 'package:recording_tool/features/recording/model/model_recording.dart'; +import 'package:recording_tool/features/recording/model/model_recording_session.dart'; +import 'package:recording_tool/features/recording/recording_display_name.dart'; +import 'package:recording_tool/features/recording/recording_platform.dart'; final recordingViewModelProvider = - StateNotifierProvider((ref) { - return RecordingViewModel(ref); - }); + NotifierProvider( + RecordingViewModel.new, + ); /// 剪切板读取结果,供 UI 决定是否提示用户。 enum ClipboardReadResult { @@ -24,23 +31,33 @@ enum ClipboardReadResult { invalid, } -class RecordingViewModel extends StateNotifier { - RecordingViewModel(this.ref) - : super( - RecordingModel( - clipboardRecordingModel: ClipboardRecordingModel( - title: '', - address: '', - ), - ), - ); - final Ref ref; +class RecordingViewModel extends Notifier { + static const Duration _recordingActionInterval = Duration(milliseconds: 300); + static const Object _startRecordingThrottleKey = 'recording.session.start'; + static const Object _stopRecordingThrottleKey = 'recording.session.stop'; static final _defaultClipboard = ClipboardRecordingModel( title: '', address: '', ); + StreamSubscription? _statusSubscription; + final _rateLimit = RateLimitHub(); + + @override + RecordingModel build() { + ref.onDispose(_dispose); + return RecordingModel( + clipboardRecordingModel: _defaultClipboard, + ); + } + + void _updateSession( + RecordingSessionState Function(RecordingSessionState session) update, + ) { + state = state.copyWith(session: update(state.session)); + } + /// 从剪切板获取小程序复制的录制信息。 Future getClipboardContent() async { try { @@ -95,4 +112,241 @@ class RecordingViewModel extends StateNotifier { hasValidClipboardInfo: false, ); } + + Future prepareSession() async { + if (!RecordingPlatform.isSupported) { + _updateSession((s) => s.copyWith(errorMessage: '当前设备不支持录制')); + return; + } + + final permissions = await PermissionService.requestMissing([ + Permission.camera, + Permission.microphone, + if (Platform.isAndroid) Permission.notification, + ..._galleryPermissions(), + ]); + + final cameraGranted = permissions[Permission.camera]?.isGranted ?? false; + if (!cameraGranted) { + _updateSession((s) => s.copyWith(errorMessage: '需要相机权限才能录制')); + return; + } + + final microphoneGranted = + permissions[Permission.microphone]?.isGranted ?? false; + final notificationsGranted = Platform.isAndroid + ? (permissions[Permission.notification]?.isGranted ?? false) + : true; + + final warnings = []; + if (Platform.isAndroid && !notificationsGranted) { + warnings.add('未授予通知权限,录制时可能看不到前台服务通知,系统更容易结束后台录制'); + } + if (!microphoneGranted) { + warnings.add('未授予麦克风权限,当前将以静音模式录制'); + } + if (!_isGalleryPermissionGranted(permissions)) { + warnings.add('未授予相册权限,录制结束后可能无法保存到相册'); + } + + final hasDnd = await RecordingPlatform.hasNotificationPolicyAccess(); + final batteryIgnored = + await RecordingPlatform.isIgnoringBatteryOptimizations(); + + _updateSession( + (s) => s.copyWith( + hasDndAccess: hasDnd, + isBatteryOptimizedIgnored: batteryIgnored, + isMicrophoneGranted: microphoneGranted, + notificationsGranted: notificationsGranted, + permissionWarning: warnings.isEmpty ? null : warnings.join('\n'), + errorMessage: null, + clearPermissionWarning: warnings.isEmpty, + ), + ); + + await _listenStatus(); + try { + final status = await _initializePreviewWithRetry(); + _updateSession( + (s) => s.copyWith( + status: status, + isPreviewReady: status.state == RecordingState.previewing, + errorMessage: status.state == RecordingState.previewing + ? null + : (status.message ?? '相机预览初始化失败'), + ), + ); + } on PlatformException catch (error) { + _updateSession( + (s) => s.copyWith( + isPreviewReady: false, + errorMessage: error.message ?? '相机预览初始化失败', + ), + ); + } + } + + Future _initializePreviewWithRetry() async { + const maxAttempts = 8; + for (var attempt = 0; attempt < maxAttempts; attempt++) { + try { + return await RecordingPlatform.initializePreview(); + } on PlatformException catch (error) { + final shouldRetry = + error.code == 'NO_PREVIEW' && attempt < maxAttempts - 1; + if (!shouldRetry) { + rethrow; + } + await Future.delayed(Duration(milliseconds: 150 * (attempt + 1))); + } + } + throw StateError('initializePreview retry exhausted'); + } + + List _galleryPermissions() { + if (Platform.isIOS) { + return [Permission.photosAddOnly, Permission.photos]; + } + if (Platform.isAndroid) { + return [Permission.videos, Permission.storage]; + } + return const []; + } + + bool _isGalleryPermissionGranted(Map permissions) { + for (final permission in _galleryPermissions()) { + if (permissions[permission]?.isGranted ?? false) { + return true; + } + } + return _galleryPermissions().isEmpty; + } + + bool _tryAcquireRecordingAction(Object key) { + var executed = false; + _rateLimit.throttle( + key: key, + value: null, + duration: _recordingActionInterval, + options: const ThrottleOptions(leading: true, trailing: false), + onCallback: (_) => executed = true, + ); + return executed; + } + + Future startRecording({bool enableDoNotDisturb = true}) async { + if (!_tryAcquireRecordingAction(_startRecordingThrottleKey)) return; + + final session = state.session; + if (!session.isPreviewReady || + session.isRecording || + session.isStartingRecording) { + return; + } + + final displayName = recordingFileNameForPlatform( + state.clipboardRecordingModel.filename, + ); + + _updateSession( + (s) => s.copyWith(isStartingRecording: true, errorMessage: null), + ); + try { + final result = await RecordingPlatform.startRecording( + enableDoNotDisturb: enableDoNotDisturb && state.session.hasDndAccess, + displayName: displayName, + ); + _updateSession( + (s) => s.copyWith( + status: result.status, + lastOutputPath: result.outputPath, + isTouchLocked: true, + errorMessage: null, + gallerySaveFailed: false, + clearLastSaved: true, + ), + ); + } on PlatformException catch (error) { + _updateSession( + (s) => s.copyWith(errorMessage: error.message ?? '开始录制失败'), + ); + } finally { + _updateSession((s) => s.copyWith(isStartingRecording: false)); + } + } + + Future stopRecording() async { + if (!_tryAcquireRecordingAction(_stopRecordingThrottleKey)) return; + + if (!state.session.isRecording) return; + + try { + final result = await RecordingPlatform.stopRecording(); + final galleryFailed = !result.gallerySaved; + final savedName = recordingFileNameForPlatform( + state.clipboardRecordingModel.filename, + ); + _updateSession( + (s) => s.copyWith( + status: result.status, + lastOutputPath: result.outputPath ?? s.lastOutputPath, + lastSavedDisplayName: galleryFailed ? null : savedName, + errorMessage: galleryFailed + ? (result.galleryErrorMessage ?? '保存到相册失败,请开启相册权限') + : null, + gallerySaveFailed: galleryFailed, + ), + ); + } on PlatformException catch (error) { + _updateSession( + (s) => s.copyWith(errorMessage: error.message ?? '停止录制失败'), + ); + } + } + + void setTouchLocked(bool locked) { + _updateSession((s) => s.copyWith(isTouchLocked: locked)); + } + + void clearSavedRecordingResult() { + _updateSession((s) => s.copyWith(clearLastSaved: true)); + } + + Future openDndSettings() => + RecordingPlatform.openNotificationPolicySettings(); + + Future refreshDndAccess() async { + final hasDnd = await RecordingPlatform.hasNotificationPolicyAccess(); + _updateSession((s) => s.copyWith(hasDndAccess: hasDnd)); + } + + Future openBatterySettings() => + RecordingPlatform.openBatteryOptimizationSettings(); + + Future refreshBatteryOptimization() async { + final ignored = await RecordingPlatform.isIgnoringBatteryOptimizations(); + _updateSession((s) => s.copyWith(isBatteryOptimizedIgnored: ignored)); + } + + Future teardown() async { + await RecordingPlatform.setImmersiveMode(enabled: false); + await RecordingPlatform.disableDoNotDisturb(); + await RecordingPlatform.disposePreview(); + await _statusSubscription?.cancel(); + _statusSubscription = null; + state = state.copyWith(session: const RecordingSessionState()); + } + + Future _listenStatus() async { + await _statusSubscription?.cancel(); + _statusSubscription = RecordingPlatform.statusStream().listen((status) { + _updateSession((s) => s.copyWith(status: status)); + }); + } + + Future _dispose() async { + _rateLimit.clear(); + await _statusSubscription?.cancel(); + } } diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart new file mode 100644 index 0000000..15be050 --- /dev/null +++ b/lib/gen/assets.gen.dart @@ -0,0 +1,121 @@ +// dart format width=80 + +/// GENERATED CODE - DO NOT MODIFY BY HAND +/// ***************************************************** +/// FlutterGen +/// ***************************************************** + +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: deprecated_member_use,directives_ordering,implicit_dynamic_list_literal,unnecessary_import + +import 'package:flutter/widgets.dart'; + +class $AssetsImagesGen { + const $AssetsImagesGen(); + + /// File path: assets/images/image_dialog_bg.png + AssetGenImage get imageDialogBg => + const AssetGenImage('assets/images/image_dialog_bg.png'); + + /// File path: assets/images/image_logo.png + AssetGenImage get imageLogo => + const AssetGenImage('assets/images/image_logo.png'); + + /// List of all assets + List get values => [imageDialogBg, imageLogo]; +} + +class Assets { + const Assets._(); + + static const $AssetsImagesGen images = $AssetsImagesGen(); +} + +class AssetGenImage { + const AssetGenImage( + this._assetName, { + this.size, + this.flavors = const {}, + this.animation, + }); + + final String _assetName; + + final Size? size; + final Set flavors; + final AssetGenImageAnimation? animation; + + Image image({ + Key? key, + AssetBundle? bundle, + ImageFrameBuilder? frameBuilder, + ImageErrorWidgetBuilder? errorBuilder, + String? semanticLabel, + bool excludeFromSemantics = false, + double? scale, + double? width, + double? height, + Color? color, + Animation? opacity, + BlendMode? colorBlendMode, + BoxFit? fit, + AlignmentGeometry alignment = Alignment.center, + ImageRepeat repeat = ImageRepeat.noRepeat, + Rect? centerSlice, + bool matchTextDirection = false, + bool gaplessPlayback = true, + bool isAntiAlias = false, + String? package, + FilterQuality filterQuality = FilterQuality.medium, + int? cacheWidth, + int? cacheHeight, + }) { + return Image.asset( + _assetName, + key: key, + bundle: bundle, + frameBuilder: frameBuilder, + errorBuilder: errorBuilder, + semanticLabel: semanticLabel, + excludeFromSemantics: excludeFromSemantics, + scale: scale, + width: width, + height: height, + color: color, + opacity: opacity, + colorBlendMode: colorBlendMode, + fit: fit, + alignment: alignment, + repeat: repeat, + centerSlice: centerSlice, + matchTextDirection: matchTextDirection, + gaplessPlayback: gaplessPlayback, + isAntiAlias: isAntiAlias, + package: package, + filterQuality: filterQuality, + cacheWidth: cacheWidth, + cacheHeight: cacheHeight, + ); + } + + ImageProvider provider({AssetBundle? bundle, String? package}) { + return AssetImage(_assetName, bundle: bundle, package: package); + } + + String get path => _assetName; + + String get keyName => _assetName; +} + +class AssetGenImageAnimation { + const AssetGenImageAnimation({ + required this.isAnimation, + required this.duration, + required this.frames, + }); + + final bool isAnimation; + final Duration duration; + final int frames; +} diff --git a/pubspec.yaml b/pubspec.yaml index b2ea6ec..9ffac15 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,6 +58,8 @@ dev_dependencies: # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^6.0.0 + build_runner: ^2.15.0 + flutter_gen_runner: ^5.14.1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -68,7 +70,11 @@ flutter: # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true + generate: true + # To add assets to your application, add an assets section, like this: + assets: + - assets/images/ # To add assets to your application, add an assets section, like this: # assets: # - images/a_dot_burr.jpeg @@ -99,3 +105,8 @@ flutter: # # For details regarding fonts from package dependencies, # see https://flutter.dev/to/font-from-package + +flutter_gen: + output: lib/gen/ + integrations: + flutter_svg: true diff --git a/test/features/recording/view_model_recording_test.dart b/test/features/recording/view_model_recording_test.dart index bee487a..d73bb5c 100644 --- a/test/features/recording/view_model_recording_test.dart +++ b/test/features/recording/view_model_recording_test.dart @@ -25,6 +25,19 @@ void main() { .setMockMethodCallHandler(SystemChannels.platform, null); }); + group('RecordingViewModel', () { + test('initializes with default clipboard and session state', () { + final container = ProviderContainer(); + addTearDown(container.dispose); + + final model = container.read(recordingViewModelProvider); + expect(model.hasValidClipboardInfo, isFalse); + expect(model.clipboardRecordingModel.title, defaultClipboardTitle); + expect(model.session.isPreviewReady, isFalse); + expect(model.session.isRecording, isFalse); + }); + }); + group('RecordingViewModel.getClipboardContent', () { test( 'updates state when clipboard contains valid mini program JSON',