如何在 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;
}
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(() {});
});
}
现在使用录音时间
感谢莫希特的回答
请使用更新后的功能。
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(() {});
});
}
谢谢
另一种选择可能是使用 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
开始