compressVideo method
Future<void>
compressVideo({
- required BuildContext context,
- required File video,
- required String outputPathWithFilename,
- bool deleteOriginalFile = false,
Implementation
Future<void> compressVideo({
required BuildContext context,
required File video,
required String outputPathWithFilename,
bool deleteOriginalFile = false,
}) async {
try {
// ✅ Create a StreamController to convert the plugin's "subscribe" into a Dart Stream
final controller = StreamController<double>();
// Subscribe to progress updates
final subscription = VideoCompress.compressProgress$.subscribe((progress) {
controller.add(progress); // Forward to our stream
});
// Show progress dialog using your existing ProgressDialog widget
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return ProgressDialog(progressStream: controller.stream);
},
);
// Start video compression
MediaInfo? mediaInfo = await VideoCompress.compressVideo(
video.path,
quality: VideoQuality.DefaultQuality,
deleteOrigin: deleteOriginalFile,
);
// ✅ Clean up after compression
subscription.unsubscribe(); // Stop listening
await controller.close();
// Close progress dialog
if (context.mounted) {
Navigator.of(context).pop();
}
// Save compressed video
if (mediaInfo?.file != null) {
final file = File(outputPathWithFilename);
await file.writeAsBytes(await mediaInfo!.file!.readAsBytes());
}
} catch (e) {
throw Exception(e);
}
}