image_gallery_saver_plus
갤러리에 이미지를 저장하기 위한 플러터 플러그인입니다. iOS는 Info.plist 파일에 다음 키를 추가해야 합니다.
이미지 갤러리 저장기 플러스
{"sdk":"flutter"}{"sdk":"flutter"}아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
An updated plugin enables users to download and save images and videos directly to their gallery, with enhanced performance, improved media organization features, and better compatibility across various devices.
To use this plugin, add image_gallery_saver_plus as a dependency in your pubspec.yaml file. For example:
dependencies:
image_gallery_saver_plus: ^5.1.1
Your project need create with swift. Add the following keys to your Info.plist file, located in /ios/Runner/Info.plist:
<key>NSPhotoLibraryAddUsageDescription</key>
<string>We need permission to save photos and videos to your library for your convenience.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need permission to access your photo library to view and select your photos and videos.</string>
You need to ask for storage permission to save an image to the gallery. You can handle the storage permission using flutter_permission_handler. In Android version 10, Open the manifest file and add this line to your application tag
<application android:requestLegacyExternalStorage="true" .....>
ImageGallerySaverPlus.saveImage(...)Save raw image bytes to the gallery.
| Parameter | Type | Default | Description |
|---|---|---|---|
imageBytes |
Uint8List |
required | The image bytes to save. |
quality |
int |
80 |
JPEG compression quality (0–100). |
name |
String? |
null |
Optional file name. |
isReturnImagePathOfIOS |
bool |
false |
Return the saved file path on iOS. |
creationDate |
DateTime? |
null |
iOS only. Sets the asset's creation date shown in Photos. See below. |
ImageGallerySaverPlus.saveFile(...)Save a PNG/JPG/JPEG image or a video file to the gallery.
| Parameter | Type | Default | Description |
|---|---|---|---|
file |
String |
required | Path to the local file to save. |
name |
String? |
null |
Optional file name. |
isReturnPathOfIOS |
bool |
false |
Return the saved file path on iOS. |
creationDate |
DateTime? |
null |
iOS only. Sets the asset's creation date shown in Photos (works for both images and videos). See below. |
By default the gallery stamps saved media with the current date/time. Pass a
creationDate to control the date that Photos displays for the asset — useful
when re-saving media that was originally captured at an earlier time (e.g.
downloaded backups, imported memories).
final result = await ImageGallerySaverPlus.saveImage(
imageBytes,
quality: 80,
name: "my_photo",
creationDate: DateTime(2020, 1, 1),
);
final result = await ImageGallerySaverPlus.saveFile(
savePath,
creationDate: DateTime.parse("2020-01-01T10:30:00"),
);
Notes:
creationDate imports the asset through
PHPhotoLibrary so the date is honored. When it is null, the legacy save
path is used and the asset gets the current date.Saving an image from the internet, quality and name is option
_saveLocalImage() async {
RenderRepaintBoundary boundary =
_globalKey.currentContext!.findRenderObject() as RenderRepaintBoundary;
ui.Image image = await boundary.toImage();
ByteData? byteData =
await (image.toByteData(format: ui.ImageByteFormat.png));
if (byteData != null) {
final result =
await ImageGallerySaverPlus.saveImage(byteData.buffer.asUint8List());
print(result);
}
}
_saveNetworkImage() async {
var response = await Dio().get(
"https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=a62e824376d98d1069d40a31113eb807/838ba61ea8d3fd1fc9c7b6853a4e251f94ca5f46.jpg",
options: Options(responseType: ResponseType.bytes));
final result = await ImageGallerySaverPlus.saveImage(
Uint8List.fromList(response.data),
quality: 60,
name: "hello");
print(result);
}
Saving file(ig: video/gif/others) from the internet
_saveNetworkGifFile() async {
var appDocDir = await getTemporaryDirectory();
String savePath = appDocDir.path + "/temp.gif";
String fileUrl =
"https://hyjdoc.oss-cn-beijing.aliyuncs.com/hyj-doc-flutter-demo-run.gif";
await Dio().download(fileUrl, savePath);
final result =
await ImageGallerySaverPlus.saveFile(savePath, isReturnPathOfIOS: true);
print(result);
}
_saveNetworkVideoFile() async {
var appDocDir = await getTemporaryDirectory();
String savePath = appDocDir.path + "/temp.mp4";
String fileUrl =
"https://s3.cn-north-1.amazonaws.com.cn/mtab.kezaihui.com/video/ForBiggerBlazes.mp4";
await Dio().download(fileUrl, savePath, onReceiveProgress: (count, total) {
print((count / total * 100).toStringAsFixed(0) + "%");
});
final result = await ImageGallerySaverPlus.saveFile(savePath);
print(result);
}