Flutter中video_editor ^3.0.0裁剪视频导出至目录/相册求助
解决video_editor ^3.0.0导出裁剪视频到本地目录/系统相册的问题
1. 补充必要依赖
在pubspec.yaml中添加以下依赖:
dependencies: video_editor: ^3.0.0 path_provider: ^2.0.15 gallery_saver: ^2.3.2 permission_handler: ^10.2.0
执行flutter pub get完成安装。
2. 配置平台权限
- Android:在
android/app/src/main/AndroidManifest.xml中添加存储权限(适配不同安卓版本):
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:minSdkVersion="33" />
- iOS:在
ios/Runner/Info.plist中添加相册写入权限描述:
<key>NSPhotoLibraryAddUsageDescription</key> <string>需要访问相册以保存裁剪后的视频</string>
3. 实现导出逻辑
假设你已经初始化了VideoEditorController,以下是完整的导出函数示例:
import 'dart:io'; import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart'; import 'package:gallery_saver/gallery_saver.dart'; import 'package:permission_handler/permission_handler.dart'; // 导出裁剪后的视频 Future<void> exportEditedVideo(VideoEditorController controller) async { // 1. 请求存储权限 final permissionStatus = await Permission.storage.request(); if (!permissionStatus.isGranted) { // 权限拒绝时可提示用户前往设置开启 return; } // 2. 生成导出路径 // 应用私有文档目录(用户无法直接通过文件管理器访问) final directory = await getApplicationDocumentsDirectory(); // 若需让用户在文件管理器中找到视频,安卓可改用外部存储目录: // final directory = await getExternalStorageDirectory(); final fileName = "edited_video_${DateTime.now().millisecondsSinceEpoch}.mp4"; final outputPath = path.join(directory.path, fileName); try { // 3. 执行视频导出 await controller.exportVideo( outputPath: outputPath, // 可选:配置导出质量,比如high/medium/low preset: VideoExportPreset.medium, onProgress: (progress) { // 可在此更新进度UI,比如进度条 print("导出进度:${(progress * 100).toInt()}%"); }, ); // 4. 保存到系统相册 final result = await GallerySaver.saveVideo(outputPath); if (result != null && result) { print("视频已保存到相册"); // 可添加导出成功的用户提示 } else { print("保存到相册失败"); } } catch (e) { print("导出失败:$e"); // 处理导出错误,比如弹窗提示用户 } }
4. 调用导出函数
在UI中添加导出按钮,点击时触发导出逻辑:
ElevatedButton( onPressed: () => exportEditedVideo(yourVideoEditorController), child: const Text("导出视频"), )
关键说明
- 路径选择:
getApplicationDocumentsDirectory()是应用私有目录,适合存储仅应用内使用的视频;安卓用getExternalStorageDirectory()可让用户在文件管理器中直接找到视频。 - 进度监听:通过
onProgress回调可实时更新导出进度,提升用户体验。 - 权限适配:不同安卓版本的存储权限规则不同,需按配置添加对应权限声明。
内容的提问来源于stack exchange,提问作者neelam anil
相关产品推荐
相关产品推荐

