gal 2.1.0 gal: ^2.1.0 copied to clipboard
Gal is a Flutter plugin for saving image or video to gallary/photos. You can also easily handle permissions.
Gal πΌοΈ #
Dart3 plugin for saving image or video to gallery/photos #
Please LIKEπ and STARβοΈ to support our volunteer efforts. #
Android | iOS | macOS | Windows | |
---|---|---|---|---|
Support | SDK 21+ | 11+ | 11+ | 10+ |
iOS | Android | |
---|---|---|
Example |
β¨ Features #
- Open gallery
- Save video
- Save image
- Save to album
- Save with metadata
- Handle permission
- Handle errors
- Lots of docs and wiki
π Get started #
Add dependency #
You can use the command to add gal as a dependency with the latest stable version:
$ flutter pub add gal
iOS #
Add the following keys to the ios/Runner/Info.plist
:
<key>NSPhotoLibraryAddUsageDescription</key>
Required<key>NSPhotoLibraryUsageDescription</key>
Required for ios < 14 or saving to album
You can copy from Info.plist in example.
Android #
Add the following keys to the android/app/src/main/AndroidManifest.xml
:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
Required for API <= 29android:requestLegacyExternalStorage="true"
Required for saving to album in API 29
You can copy from AndroidManifest.xml in example.
π΄ Warning: Android emulators with API < 29 require SD card setup. Real devices don't.
macOS #
Add the following keys to the macos/Runner/Info.plist
:
<key>NSPhotoLibraryAddUsageDescription</key>
Required<key>NSPhotoLibraryUsageDescription</key>
Required for saving to album
You can copy from Info.plist in example.
π΄ Warning: Flutter has fatal crash issee for loading info.plist on macOS now.
Windows #
We recommend that you update Visual Studio to the latest version for using C++ 20
.
β Usage #
Save from local #
// Save Image (Supports two ways)
await Gal.putImage('$filePath');
await Gal.putImageBytes('$uint8List');
// Save Video
await Gal.putVideo('$filePath');
// Save to album
await Gal.putImage('$filePath', album: '$album')
...
Download from Internet #
$ flutter pub add dio
// Download Image
final imagePath = '${Directory.systemTemp.path}/image.jpg';
await Dio().download('$url',imagePath);
await Gal.putImage(imagePath);
// Download Video
final videoPath = '${Directory.systemTemp.path}/video.mp4';
await Dio().download('$url',videoPath);
await Gal.putVideo(videoPath);
Save from Camera #
$ flutter pub add image_picker
// Shot and Save
final image = await ImagePicker.pickImage(source: ImageSource.camera);
await Gal.putImage(image.path);
$ flutter pub add camera
// Record and Save
...
final video = await controller.stopVideoRecording();
await Gal.putVideo(video.path);
Handle Permission #
// Check Permission
await Gal.hasAccess();
// Request Permission
await Gal.requestAccess();
Handle Errors #
// Save Image with try-catch
try {
await Gal.putImage($imagePath);
} on GalException catch (e) {
log(e.type.message);
}
// Exception Type
enum GalExceptionType {
accessDenied,
notEnoughSpace,
notSupportedFormat,
unexpected;
String get message => switch (this) {
accessDenied => 'You do not have permission to access the gallery app.',
notEnoughSpace => 'Not enough space for storage.',
notSupportedFormat => 'Unsupported file formats.',
unexpected => 'An unexpected error has occurred.',
};
}