1.开始录制、结束录制增加
2. 增加电量检测、内存检查,是否低于 10%
This commit is contained in:
@@ -6,6 +6,8 @@ import 'package:flutter/services.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
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/recording_display_name.dart';
|
||||
@@ -33,7 +35,20 @@ class _RecordingPageState extends ConsumerState<RecordingPage> {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => _bootstrap());
|
||||
}
|
||||
|
||||
Future<void> _checkAndShowDeviceHealthAlerts() async {
|
||||
final snapshot = await AppPlatformInfo.deviceHealth();
|
||||
if (!mounted) return;
|
||||
|
||||
final lines = DeviceHealthChecker.warningLines(snapshot);
|
||||
if (lines.isEmpty) return;
|
||||
|
||||
await AppDialog.deviceHealthAlert(context, lines: lines);
|
||||
}
|
||||
|
||||
Future<void> _bootstrap() async {
|
||||
await _checkAndShowDeviceHealthAlerts();
|
||||
if (!mounted) return;
|
||||
|
||||
final clipboardResult = await ref
|
||||
.read(recordingViewModelProvider.notifier)
|
||||
.getClipboardContent();
|
||||
@@ -95,6 +110,8 @@ class _RecordingPageState extends ConsumerState<RecordingPage> {
|
||||
await _showNoPlayerInfoDialog();
|
||||
return;
|
||||
}
|
||||
await _checkAndShowDeviceHealthAlerts();
|
||||
if (!mounted) return;
|
||||
await ref.read(recordingSessionControllerProvider.notifier).startRecording();
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ 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';
|
||||
@@ -95,7 +96,12 @@ final recordingSessionControllerProvider =
|
||||
);
|
||||
|
||||
class RecordingSessionController extends Notifier<RecordingSessionState> {
|
||||
static const Duration _recordingActionInterval = Duration(milliseconds: 300);
|
||||
static const Object _startRecordingThrottleKey = 'recording.session.start';
|
||||
static const Object _stopRecordingThrottleKey = 'recording.session.stop';
|
||||
|
||||
StreamSubscription<RecordingStatus>? _statusSubscription;
|
||||
final _rateLimit = RateLimitHub();
|
||||
|
||||
@override
|
||||
RecordingSessionState build() {
|
||||
@@ -207,7 +213,21 @@ class RecordingSessionController extends Notifier<RecordingSessionState> {
|
||||
return _galleryPermissions().isEmpty;
|
||||
}
|
||||
|
||||
bool _tryAcquireRecordingAction(Object key) {
|
||||
var executed = false;
|
||||
_rateLimit.throttle<void>(
|
||||
key: key,
|
||||
value: null,
|
||||
duration: _recordingActionInterval,
|
||||
options: const ThrottleOptions(leading: true, trailing: false),
|
||||
onCallback: (_) => executed = true,
|
||||
);
|
||||
return executed;
|
||||
}
|
||||
|
||||
Future<void> startRecording({bool enableDoNotDisturb = true}) async {
|
||||
if (!_tryAcquireRecordingAction(_startRecordingThrottleKey)) return;
|
||||
|
||||
if (!state.isPreviewReady ||
|
||||
state.isRecording ||
|
||||
state.isStartingRecording) {
|
||||
@@ -239,6 +259,8 @@ class RecordingSessionController extends Notifier<RecordingSessionState> {
|
||||
}
|
||||
|
||||
Future<void> stopRecording() async {
|
||||
if (!_tryAcquireRecordingAction(_stopRecordingThrottleKey)) return;
|
||||
|
||||
if (!state.isRecording) return;
|
||||
|
||||
try {
|
||||
@@ -302,6 +324,7 @@ class RecordingSessionController extends Notifier<RecordingSessionState> {
|
||||
}
|
||||
|
||||
Future<void> _dispose() async {
|
||||
_rateLimit.clear();
|
||||
await _statusSubscription?.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user