diff --git a/lib/features/recording/model/model_recording_session.dart b/lib/features/recording/model/model_recording_session.dart index cb11732..32423b5 100644 --- a/lib/features/recording/model/model_recording_session.dart +++ b/lib/features/recording/model/model_recording_session.dart @@ -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({ diff --git a/lib/features/recording/pages/page_record.dart b/lib/features/recording/pages/page_record.dart index 8810b11..9bc2b82 100644 --- a/lib/features/recording/pages/page_record.dart +++ b/lib/features/recording/pages/page_record.dart @@ -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 { const CameraPreviewWidget(), if (!state.isPreviewReady && state.errorMessage == null) const RecordingLoadingOverlayWidget(message: '正在启动相机…'), - + const RecordTimerWidget(), RecordingHudWidget( state: state, showClipboardHint: showClipboardInfo, diff --git a/lib/features/recording/widgets/widget_record_timer.dart b/lib/features/recording/widgets/widget_record_timer.dart new file mode 100644 index 0000000..fa0269f --- /dev/null +++ b/lib/features/recording/widgets/widget_record_timer.dart @@ -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 createState() => _RecordTimerWidgetState(); +} + +class _RecordTimerWidgetState extends ConsumerState { + @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)], + ), + ), + ), + ), + ); + } +} diff --git a/lib/features/recording/widgets/widget_recording_touch_lock_overlay.dart b/lib/features/recording/widgets/widget_recording_touch_lock_overlay.dart index 7903438..ae44c5a 100644 --- a/lib/features/recording/widgets/widget_recording_touch_lock_overlay.dart +++ b/lib/features/recording/widgets/widget_recording_touch_lock_overlay.dart @@ -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), ), ), ),