You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:20:13