在 Flutter app 中,通过视频 URL 下载视频到手机相册

在 Flutter app 中,通过视频 URL 下载视频到手机相册可以通过以下步骤实现:

1. 添加依赖

使用 dio 下载文件,结合 path_provider 获取临时存储路径,以及 gallery_saver 将文件保存到相册。

在 pubspec.yaml 中添加以下依赖:

yaml 复制代码
dependencies:
  dio: ^5.0.0
  path_provider: ^2.0.15
  gallery_saver: ^2.3.0

然后运行 flutter pub get 安装依赖。


2. 下载并保存视频

实现一个函数,完成以下步骤:

  1. 获取临时文件夹路径。
  2. 下载视频到本地。
  3. 将下载的视频保存到相册。

以下是示例代码:

dart 复制代码
import 'dart:io';

import 'package:dio/dio.dart';
import 'package:path_provider/path_provider.dart';
import 'package:gallery_saver/gallery_saver.dart';

Future<void> downloadVideoToGallery(String videoUrl) async {
  try {
    // 获取临时目录路径
    final tempDir = await getTemporaryDirectory();
    final tempPath = '${tempDir.path}/temp_video.mp4';

    // 使用 Dio 下载文件
    Dio dio = Dio();
    await dio.download(videoUrl, tempPath);

    // 将视频保存到相册
    bool? result = await GallerySaver.saveVideo(tempPath);
    if (result == true) {
      print("视频已保存到相册");
    } else {
      print("保存视频失败");
    }

    // 删除临时文件
    final tempFile = File(tempPath);
    if (await tempFile.exists()) {
      await tempFile.delete();
    }
  } catch (e) {
    print("下载或保存视频时出错: $e");
  }
}

3. 调用方法

在需要下载视频的地方调用 downloadVideoToGallery 方法,传入视频 URL:

dart 复制代码
ElevatedButton(
  onPressed: () {
    final videoUrl = "https://example.com/path-to-video.mp4";
    downloadVideoToGallery(videoUrl);
  },
  child: Text("下载视频"),
)

4. 权限配置

Android

在 AndroidManifest.xml 中添加存储权限:

xml 复制代码
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在 Android 11(API 30)及以上版本,推荐使用 MediaStore 接口,GallerySaver 已兼容。

iOS

在 ios/Runner/Info.plist 中添加以下权限描述:

xml 复制代码
<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问您的相册以保存视频。</string>

5. 注意事项

  • 确保 URL 有效:视频 URL 必须指向可下载的视频文件。
  • 错误处理:对网络错误、权限错误等情况进行处理。
  • 权限检查 :在 Android 运行时需动态申请存储权限,使用 permission_handler 包可简化操作。
相关推荐
美狐美颜SDK开放平台9 小时前
准备开发直播APP?视频美颜SDK接入前的十项检查清单
android·ios·音视频·直播美颜sdk·视频美颜sdk
传奇开心果编程10 小时前
【Jetpack Compose娓娓道来】第26课:Repository模式与数据层设计——数据的唯一入口
android·移动开发·1024程序员节·jetpack compose·编程语言理论·编程框架·声明式ui
三少爷的鞋14 小时前
Kotlin 协程,重点就在「协」这个字上
android·kotlin
好的佩奇15 小时前
Dart 之模式
android·flutter·dart
淡淡的香烟16 小时前
Flutter实现多语言切换
android·flutter·1024程序员节
AIsoft_868918 小时前
手机视频转文字工具清单:哪些APP支持录屏识别
android·音视频
_祝你今天愉快21 小时前
Paint Cavans高级绘制:[一]Paint画笔高级应用
android
事圆则缓21 小时前
从零搭建一套 Flutter 架构:先跑通数据流
flutter
@zulnger1 天前
安卓进行稳定性测试
android·appium·1024程序员节
承渊政道1 天前
iOS远程控制电脑用什么好?iPhoneiPad远程控制Windows电脑最佳方案2026横评
windows·ios·远程控制·1024程序员节·iphone ipad