在 Flutter app 中,通过视频 URL 下载视频到手机相册可以通过以下步骤实现:
1. 添加依赖
使用 dio
下载文件,结合 path_provider
获取临时存储路径,以及 gallery_saver
将文件保存到相册。
在 pubspec.yaml
中添加以下依赖:
dependencies:
dio: ^5.0.0
path_provider: ^2.0.15
gallery_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
包可简化操作。