在 Flutter app 中,通过视频 URL 下载视频到手机相册可以通过以下步骤实现:
1. 添加依赖
使用 dio
下载文件,结合 path_provider
获取临时存储路径,以及 gallery_saver
将文件保存到相册。
在 pubspec.yaml
中添加以下依赖:
dependencies:dio: ^5.0.0path_provider: ^2.0.15gallery_saver: ^2.3.0
然后运行 flutter pub get
安装依赖。
2. 下载并保存视频
实现一个函数,完成以下步骤:
- 获取临时文件夹路径。
- 下载视频到本地。
- 将下载的视频保存到相册。
以下是示例代码:
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:
ElevatedButton(onPressed: () {final videoUrl = "https://example.com/path-to-video.mp4";downloadVideoToGallery(videoUrl);},child: Text("下载视频"),
)
4. 权限配置
Android
在 AndroidManifest.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
中添加以下权限描述:
<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问您的相册以保存视频。</string>
5. 注意事项
- 确保 URL 有效:视频 URL 必须指向可下载的视频文件。
- 错误处理:对网络错误、权限错误等情况进行处理。
- 权限检查:在 Android 运行时需动态申请存储权限,使用
permission_handler
包可简化操作。