Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.
Gal
Dart3 plugin for saving image or video to photos gallery
pub.dev »
📢 Support Us
Please support our volunteer efforts by giving us a LIKE👍 and STAR⭐️.
🧠 DeepWiki Documentation

📱 Supported Platforms
|
Android |
iOS |
macOS |
Windows |
Linux |
| Support |
SDK 21+ |
11+ |
11+ |
10+ |
See: gal_linux |
Support means that all functions have been tested manually or automatically whenever possible.
📸 Demo
|
iOS |
Android |
| Example |
 |
 |
✨ Features
- Open gallery
- Save video
- Save image
- Save to album
- Save with metadata
- Handle permission
- Handle errors
- Comprehensive documentation and wiki
🚀 Getting Started
Add Dependency
Add the latest stable version of gal to your dependencies:
flutter pub add gal
iOS Setup
Add the following keys to ios/Runner/Info.plist:
<key>NSPhotoLibraryAddUsageDescription</key> Required
<key>NSPhotoLibraryUsageDescription</key> Required for iOS < 14 or saving to album
You can copy from example's Info.plist.
Android Setup
Add the following keys to android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" /> Required for API <= 29
android:requestLegacyExternalStorage="true" Required for saving to album in API 29
You can copy from example's AndroidManifest.xml.
[!WARNING]
Android emulators with API < 29 require SD card setup. Real devices don't.
macOS Setup
Add the following keys to macos/Runner/Info.plist:
<key>NSPhotoLibraryAddUsageDescription</key> Required
<key>NSPhotoLibraryUsageDescription</key> Required for saving to album
You can copy from example's Info.plist.
[!WARNING]
Flutter currently has a fatal problem for loading info.plist, which may cause permission denials or app crashes in some code editors.
Windows Setup
Update Visual Studio to the latest version for using C++ 20.
[!TIP]
If you can't compile, try downloading the latest Windows SDK:
- Open Visual Studio Installer
- Select Modify
- Select Windows SDK
Linux Setup
Linux is not officially supported, but can be added through a non-endorsed federated plugin.
See: gal_linux
💻 Usage
Save from Local
await Gal.putImage('$filePath');
await Gal.putImageBytes('$uint8List');
await Gal.putVideo('$filePath');
await Gal.putImage('$filePath', album: '$album')
...
Download from Internet
flutter pub add dio
final imagePath = '${Directory.systemTemp.path}/image.jpg';
await Dio().download('$url',imagePath);
await Gal.putImage(imagePath);
final videoPath = '${Directory.systemTemp.path}/video.mp4';
await Dio().download('$url',videoPath);
await Gal.putVideo(videoPath);
Save from Camera
flutter pub add image_picker
final image = await ImagePicker.pickImage(source: ImageSource.camera);
await Gal.putImage(image.path);
flutter pub add camera
...
final video = await controller.stopVideoRecording();
await Gal.putVideo(video.path);
Handle Permissions
final hasAccess = await Gal.hasAccess();
await Gal.requestAccess();
final hasAccess = await Gal.hasAccess(toAlbum: true);
await Gal.requestAccess(toAlbum: true);
Handle Errors
try {
await Gal.putImage('$filePath');
} on GalException catch (e) {
log(e.type.message);
}
enum GalExceptionType {
accessDenied,
notEnoughSpace,
notSupportedFormat,
unexpected;
String get message => switch (this) {
accessDenied => 'Permission to access the gallery is denied.',
notEnoughSpace => 'Not enough space for storage.',
notSupportedFormat => 'Unsupported file format.',
unexpected => 'An unexpected error has occurred.',
};
}
📚 Documentation
If you write an article about Gal, let us know in the discussion and we'll post the URL in the wiki or readme 🤝
💚 Trusted by Major Projects
Although Gal has only been released for a short time, it's already trusted by major projects.
and more...