flutter如何保存图片到相册
在Flutter开发中,我想把网络图片或应用内生成的图片保存到手机相册,但不知道具体该怎么实现。请问应该使用哪个插件?代码该怎么写?需要哪些权限?在iOS和Android上有什么区别吗?求一个完整的实现示例。
2 回复
使用image_gallery_saver插件。
- 添加依赖:
image_gallery_saver: ^2.1.1 - 保存图片:
await ImageGallerySaver.saveImage(bytes);
需申请存储权限。
更多关于flutter如何保存图片到相册的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中保存图片到相册,可以使用 image_gallery_saver 或 photo_manager 插件。以下是使用 image_gallery_saver 的步骤:
步骤 1:添加依赖
在 pubspec.yaml 中添加:
dependencies:
image_gallery_saver: ^2.1.1
运行 flutter pub get 安装。
步骤 2:配置权限(仅 Android 和 iOS)
- Android:在
android/app/src/main/AndroidManifest.xml中添加:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> - iOS:在
ios/Runner/Info.plist中添加:<key>NSPhotoLibraryAddUsageDescription</key> <string>需要保存图片到相册</string>
步骤 3:编写保存代码
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:flutter/services.dart';
// 保存网络图片
Future<void> saveNetworkImage(String imageUrl) async {
try {
// 获取图片数据
var response = await Dio().get(imageUrl, options: Options(responseType: ResponseType.bytes));
final result = await ImageGallerySaver.saveImage(
Uint8List.fromList(response.data),
quality: 100,
name: "my_image"
);
print(result); // 输出保存结果
} catch (e) {
print("保存失败: $e");
}
}
// 保存本地图片文件
Future<void> saveLocalImage(File imageFile) async {
try {
final result = await ImageGallerySaver.saveFile(imageFile.path);
print(result);
} catch (e) {
print("保存失败: $e");
}
}
完整示例
import 'package:flutter/material.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:http/http.dart' as http;
class SaveImageDemo extends StatelessWidget {
Future<void> _saveImage() async {
String url = "https://example.com/image.jpg";
var response = await http.get(Uri.parse(url));
await ImageGallerySaver.saveImage(
Uint8List.fromList(response.bodyBytes),
name: "saved_image"
);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("图片已保存到相册")));
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: _saveImage,
child: Text('保存图片到相册'),
),
),
);
}
}
注意事项:
- 需要处理存储权限(Android 6.0+ 和 iOS 需要动态申请)
- 建议使用
permission_handler插件处理权限申请 - 网络图片需要互联网权限(Android 添加
<uses-permission android:name="android.permission.INTERNET"/>)
这是最常用的图片保存方案,适用于大多数场景。

