如何在flutter中显示录制时间?

问题描述 投票:0回答:3

如何在 flutter 中显示录制视频的时间。我正在使用 camera(^0.9.4+16) 包。

        Future<String?> _startVideoRecording() async {
          
            if (!controller!.value.isInitialized) {
              Fluttertoast.showToast(
                  msg: 'Please wait',
                  toastLength: Toast.LENGTH_SHORT,
                  gravity: ToastGravity.CENTER,
                  timeInSecForIosWeb: 1,
                  backgroundColor: Colors.grey,
                  textColor: Colors.white);
        
              return null;
            }
            // Do nothing if a recording is on progress
            if (controller!.value.isRecordingVideo) {
        
              return null;
            }
        
            final Directory appDirectory = await getApplicationDocumentsDirectory();
            final String videoDirectory = '${appDirectory.path}/Videos';
            await Directory(videoDirectory).create(recursive: true);
            final String currentTime = DateTime.now().millisecondsSinceEpoch.toString();
            final String filePath = '$videoDirectory/${currentTime}.mp4';
        
            try {
              await controller!.startVideoRecording();
              videoPath = filePath;
            } on CameraException catch (e) {
              _showCameraException(e);
              return null;
            }
        
            return file Path;
          }

这是一个例子image

flutter camera flutter-dependencies video-capture
3个回答
1
投票
  String recordingTime = '0:0'; // to store value
  bool isRecording = false;

  void recordTime() {
    var startTime = DateTime.now();
    Timer.periodic(const Duration(seconds: 1), (Timer t) {
      var diff = DateTime.now().difference(startTime);

      recordingTime =
          '${diff.inHours < 60 ? diff.inHours : 0}:${diff.inMinutes < 60 ? diff.inMinutes : 0}:${diff.inSeconds < 60 ? diff.inSeconds : 0}';

      print(recordingTime);

      if (!isRecording) {
        t.cancel(); //cancel function calling
      }

      setState(() {});
    });
  }

现在使用录音时间


1
投票

感谢莫希特的回答

请使用更新后的功能。

String recordingTime = '0:0'; // to store value
 bool isRecording = false;

 void recordTime() {
    var startTime = DateTime.now();
    Timer.periodic(const Duration(seconds: 0), (Timer t) {
      var diff = DateTime.now().difference(startTime);
      recordingTime =
          '${diff.inHours == 0 ? '' : diff.inHours.toString().padLeft(2, 
"0") + ':'}${(diff.inMinutes % 60).floor().toString().padLeft(2, 
"0")}:${(diff.inSeconds % 60).floor().toString().padLeft(2, '0')}';
      if (!isRecording) {
        t.cancel();
      }
      setState(() {});
    });
  }

谢谢


0
投票

另一种选择可能是使用 Stopwatch 类 以及 Timer.periodic 构造函数:

类似这样的:

final stopwatch = Stopwatch();
void startRecording() {
  // start your recorder

  stopwatch.start();
  Timer.periodic(const Duration(seconds: 1), (timer) {
    if (!stopwatch.isRunning) {
      timer.cancel();
    }
    setState(() {}); // to update the timer on-screen
  });
}
  CustomTimer(duration: stopwatch.elapsed) // make your own widget (here CustomTimer) to display your timer if you want

注意:如果您的录音已成功开始,您只需确保您的

stopwatch
开始

© www.soinside.com 2019 - 2024. All rights reserved.