更新录制会话的时间格式,添加小时显示;在录制页面中引入计时器组件,并调整触摸锁定覆盖层的样式。
This commit is contained in:
@@ -36,9 +36,10 @@ class RecordingSessionState {
|
||||
|
||||
String get elapsedLabel {
|
||||
final totalSeconds = status.elapsedMillis ~/ 1000;
|
||||
final minutes = (totalSeconds ~/ 60).toString().padLeft(2, '0');
|
||||
final hours = (totalSeconds ~/ 3600).toString().padLeft(2, '0');
|
||||
final minutes = ((totalSeconds % 3600) ~/ 60).toString().padLeft(2, '0');
|
||||
final seconds = (totalSeconds % 60).toString().padLeft(2, '0');
|
||||
return '$minutes:$seconds';
|
||||
return '$hours:$minutes:$seconds';
|
||||
}
|
||||
|
||||
RecordingSessionState copyWith({
|
||||
|
||||
@@ -12,6 +12,7 @@ import 'package:recording_tool/features/recording/view-model/view_model_recordin
|
||||
import 'package:recording_tool/features/recording/widgets/widget_camera_preview.dart';
|
||||
import 'package:recording_tool/features/recording/widgets/widget_record_footer.dart';
|
||||
import 'package:recording_tool/features/recording/widgets/widget_record_header.dart';
|
||||
import 'package:recording_tool/features/recording/widgets/widget_record_timer.dart';
|
||||
import 'package:recording_tool/features/recording/widgets/widget_recording_hud.dart';
|
||||
import 'package:recording_tool/features/recording/widgets/widget_recording_loading_overlay.dart';
|
||||
import 'package:recording_tool/features/recording/widgets/widget_recording_saved_dialog.dart';
|
||||
@@ -224,7 +225,7 @@ class _RecordingPageState extends ConsumerState<RecordingPage> {
|
||||
const CameraPreviewWidget(),
|
||||
if (!state.isPreviewReady && state.errorMessage == null)
|
||||
const RecordingLoadingOverlayWidget(message: '正在启动相机…'),
|
||||
|
||||
const RecordTimerWidget(),
|
||||
RecordingHudWidget(
|
||||
state: state,
|
||||
showClipboardHint: showClipboardInfo,
|
||||
|
||||
45
lib/features/recording/widgets/widget_record_timer.dart
Normal file
45
lib/features/recording/widgets/widget_record_timer.dart
Normal file
@@ -0,0 +1,45 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:recording_tool/features/recording/view-model/view_model_recording.dart';
|
||||
|
||||
class RecordTimerWidget extends ConsumerStatefulWidget {
|
||||
const RecordTimerWidget({super.key});
|
||||
|
||||
@override
|
||||
ConsumerState<RecordTimerWidget> createState() => _RecordTimerWidgetState();
|
||||
}
|
||||
|
||||
class _RecordTimerWidgetState extends ConsumerState<RecordTimerWidget> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final session = ref.watch(
|
||||
recordingViewModelProvider.select((value) => value.session),
|
||||
);
|
||||
final isRecording = session.isRecording;
|
||||
final displayTime = isRecording ? session.elapsedLabel : '00:00:00';
|
||||
|
||||
return Positioned(
|
||||
top: 13.r,
|
||||
left: 0,
|
||||
right: 0,
|
||||
child: Center(
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 5.r, vertical: 0.r),
|
||||
decoration: BoxDecoration(
|
||||
color: isRecording ? Colors.red : Colors.transparent,
|
||||
borderRadius: BorderRadius.circular(6.r),
|
||||
),
|
||||
child: Text(
|
||||
displayTime,
|
||||
style: TextStyle(
|
||||
color: isRecording ? Colors.white : Colors.white70,
|
||||
fontSize: 20.sp,
|
||||
shadows: [Shadow(color: Colors.black54, blurRadius: 6.r)],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -74,7 +74,7 @@ class _RecordingTouchLockOverlayWidgetState
|
||||
child: Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 48.r),
|
||||
padding: EdgeInsets.only(top: 68.r),
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black54,
|
||||
@@ -89,7 +89,7 @@ class _RecordingTouchLockOverlayWidgetState
|
||||
_isHolding
|
||||
? '保持按住 ${widget.unlockHoldDuration.inSeconds}s 解锁…'
|
||||
: '防误触已开启,按住 ${widget.unlockHoldDuration.inSeconds}s 解锁',
|
||||
style: TextStyle(color: Colors.white, fontSize: 13.sp),
|
||||
style: TextStyle(color: Colors.white, fontSize: 10.sp),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user