Press ESC to close

Flutter App : A flutter plugin for handle native gallery apps

Gal🖼️

Easy to use Dart3 plugin for handle photos app ios photo amdroid photo

example

✨Features

  • Open gallery
  • Save video
  • Save image
  • Handle pemission
  • 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 key to your Info.plist file, located in
<project root>/ios/Runner/Info.plist:

Android (API <29)

Add the following key to your AndroidManifest file, located in
<project root>/android/app/src/main/AndroidManifest.xml:

✅Usage

Save from local

//Save Image
await Gal.putImage('$filePath');

//Save Video
await Gal.putVideo('$filePath');

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);

Handle Permission

//Check Permission
await Gal.hasAccess();

//Request Access
await Gal.requestAccess();

🎯Example

Here is a minimal example. A best practice and more detailed one and can be found in the example folder.

import 'package:flutter/material.dart'; import 'package:gal/gal.dart'; void main() { runApp(const App()); } class App extends StatelessWidget { const App({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ FilledButton.icon( onPressed: () async => Gal.open(), label: const Text('Open Gallery'), icon: const Icon(Icons.open_in_new), ), FilledButton.icon( onPressed: () async => Gal.putVideo('TODO: Change this text to video path'), label: const Text('Save Video'), icon: const Icon(Icons.video_file), ), FilledButton.icon( onPressed: () async => Gal.putImage('TODO: Change this text to image path'), label: const Text('Save Image'), icon: const Icon(Icons.image), ), ], ), ), ), ); } }

📪FAQ

  • What is the best practice?

    Please see Best Practice in project wiki.

  • I have a question.

    Please see the Wiki first. If that didn’t solve the problem.
    You should go to the Discussion.
    Once you are sure there are no duplicates, please ask them through Q&A.

💚Contributing

Welcome! Feel free to create issue or PR.
We kindly suggest considering to read this vary short guide.

GitHub

View Github

Footer Example