Flutter plugin that saves images and videos to devices gallery

Overview

Gallery Saver for Flutter

Saves images and videos from network or temporary file to external storage. Both images and videos will be visible in Android Gallery and iOS Photos.

NOTE: If you want to save network image or video link, it has to contain 'http/https' prefix.

Installation

First, add gallery_saver as a dependency in your pubspec.yaml file.

iOS

Add the following keys to your Info.plist file, located in <project root>/ios/Runner/Info.plist:

  • NSPhotoLibraryUsageDescription - describe why your app needs permission for the photo library. This is called Privacy - Photo Library Usage Description in the visual editor.

Android

  • android.permission.WRITE_EXTERNAL_STORAGE - Permission for usage of external storage

Example

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:gallery_saver/gallery_saver.dart';
import 'package:image_picker/image_picker.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String firstButtonText = 'Take photo';
  String secondButtonText = 'Record video';
  double textSize = 20;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      body: Container(
        color: Colors.white,
        child: Column(
          children: <Widget>[
            Flexible(
              flex: 1,
              child: Container(
                child: SizedBox.expand(
                  child: RaisedButton(
                    color: Colors.blue,
                    onPressed: _takePhoto,
                    child: Text(firstButtonText,
                        style:
                            TextStyle(fontSize: textSize, color: Colors.white)),
                  ),
                ),
              ),
            ),
            Flexible(
              child: Container(
                  child: SizedBox.expand(
                child: RaisedButton(
                  color: Colors.white,
                  onPressed: _recordVideo,
                  child: Text(secondButtonText,
                      style: TextStyle(
                          fontSize: textSize, color: Colors.blueGrey)),
                ),
              )),
              flex: 1,
            )
          ],
        ),
      ),
    ));
  }

  void _takePhoto() async {
    ImagePicker.pickImage(source: ImageSource.camera)
        .then((File recordedImage) {
      if (recordedImage != null && recordedImage.path != null) {
        setState(() {
          firstButtonText = 'saving in progress...';
        });
        GallerySaver.saveImage(recordedImage.path).then((String path) {
          setState(() {
            firstButtonText = 'image saved!';
          });
        });
      }
    });
  }

  void _recordVideo() async {
    ImagePicker.pickVideo(source: ImageSource.camera)
        .then((File recordedVideo) {
      if (recordedVideo != null && recordedVideo.path != null) {
        setState(() {
          secondButtonText = 'saving in progress...';
        });
        GallerySaver.saveVideo(recordedVideo.path).then((String path) {
          setState(() {
            secondButtonText = 'video saved!';
          });
        });
      }
    });
  }
  void _saveNetworkVideo() async {
    String path =
        'https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4';
    GallerySaver.saveVideo(path).then((bool success) {
      setState(() {
        print('Video is saved');
      });
    });
  }

  void _saveNetworkImage() async {
    String path =
        'https://image.shutterstock.com/image-photo/montreal-canada-july-11-2019-600w-1450023539.jpg';
    GallerySaver.saveImage(path).then((bool success) {
      setState(() {
        print('Image is saved');
      });
    });
  }
}
Comments
  • GallerySaver.saveImage crashes on Android 11.0

    GallerySaver.saveImage crashes on Android 11.0

    Devices: Pixel 4 XL, Pixel 5 XL Device Type: Virtual & Physical Android Version: 11.0 API 30

    An exception and crash occurs upon calling GallerySaver.saveImage however, the image DOES get saved to the gallery successfully. The app simply crashes at this point. Tested also on Android 10.0 on both devices and the crash does not happen.

    E/AndroidRuntime(20767): java.lang.IllegalArgumentException: Invalid column NULL E/AndroidRuntime(20767): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:172) E/AndroidRuntime(20767): at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:153) E/AndroidRuntime(20767): at android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:704) E/AndroidRuntime(20767): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1816) E/AndroidRuntime(20767): at android.content.ContentResolver.openOutputStream(ContentResolver.java:1518) E/AndroidRuntime(20767): at android.content.ContentResolver.openOutputStream(ContentResolver.java:1494) E/AndroidRuntime(20767): at carnegietechnologies.gallery_saver.FileUtils.storeThumbnail(FileUtils.kt:172) E/AndroidRuntime(20767): at carnegietechnologies.gallery_saver.FileUtils.insertImage(FileUtils.kt:84) E/AndroidRuntime(20767): at carnegietechnologies.gallery_saver.GallerySaver$saveMediaFile$1$success$1.invokeSuspend(GallerySaver.kt:69) E/AndroidRuntime(20767): at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) E/AndroidRuntime(20767): at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:238) E/AndroidRuntime(20767): at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594) E/AndroidRuntime(20767): at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60) E/AndroidRuntime(20767): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:742)

    opened by crossplatfrom 16
  • Type mismatch: inferred type is String? but String was expected

    Type mismatch: inferred type is String? but String was expected

    gallery_saver-2.0.3\android\src\main\kotlin\carnegietechnologies\gallery_saver\FileUtils.kt: (280, 35): Type mismatch: inferred type is String? but String was expected

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':gallery_saver:compileDebugKotlin'.

    Compilation error. See log for more details

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Get more help at https://help.gradle.org

    BUILD FAILED in 25s Exception: Gradle task assembleDebug failed with exit code 1

    opened by shofizone 15
  • Android - App crashes when I try to save an image

    Android - App crashes when I try to save an image

    I don't know what kind of information is useful at this time to fix this, please, let me know.

    app/build.gradle android.compileSdkVersion 28 android.defaultConfig.inSdkVersion 24 android.defaultConfig.targetSdkVersion 28

    Permission granted in android.permission.WRITE_EXTERNAL_STORAGE

    E/AndroidRuntime(  849): android.database.sqlite.SQLiteException: table thumbnails has no column named relative_path (code 1 SQLITE_ERROR): , while compiling: INSERT INTO thumbnails (height,image_id,kind,_data,width,relative_path) VALUES (?,?,?,?,?,?)
    E/AndroidRuntime(  849): 	at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:184)
    E/AndroidRuntime(  849): 	at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
    E/AndroidRuntime(  849): 	at android.content.ContentProviderProxy.insert(ContentProviderNative.java:549)
    E/AndroidRuntime(  849): 	at android.content.ContentResolver.insert(ContentResolver.java:2045)
    E/AndroidRuntime(  849): 	at android.content.ContentResolver.insert(ContentResolver.java:2007)
    E/AndroidRuntime(  849): 	at carnegietechnologies.gallery_saver.FileUtils.storeThumbnail(FileUtils.kt:165)
    E/AndroidRuntime(  849): 	at carnegietechnologies.gallery_saver.FileUtils.insertImage(FileUtils.kt:84)
    E/AndroidRuntime(  849): 	at carnegietechnologies.gallery_saver.GallerySaver$saveMediaFile$1$success$1.invokeSuspend(GallerySaver.kt:69)
    E/AndroidRuntime(  849): 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    E/AndroidRuntime(  849): 	at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:238)
    E/AndroidRuntime(  849): 	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594)
    E/AndroidRuntime(  849): 	at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
    E/AndroidRuntime(  849): 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:742)
    I/Process (  849): Sending signal. PID: 849 SIG: 9
    Lost connection to device.
    
    opened by marcobraghim 12
  • App crashes with exception java.io.FileNotFoundException: open failed: ENOENT

    App crashes with exception java.io.FileNotFoundException: open failed: ENOENT

    When the image is passed to the plugin it crashes the application. If there is a FileNotFoundException then the plugin should throw an Exception to flutter.

    Here are the Logs

    I/flutter ( 7398): APPLOGS : saveFileToLocal /data/user/0/com.package.name/cache/image_cropper_1583319540032.jpg
    W/MediaStore( 7398): Failed to obtain thumbnail for content://media/external/images/media/1757
    W/MediaStore( 7398): java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
    W/MediaStore( 7398): 	at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:149)
    W/MediaStore( 7398): 	at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:705)
    W/MediaStore( 7398): 	at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1694)
    W/MediaStore( 7398): 	at android.content.ContentResolver.openTypedAssetFile(ContentResolver.java:1599)
    W/MediaStore( 7398): 	at android.content.ContentResolver.lambda$loadThumbnail$0(ContentResolver.java:3623)
    W/MediaStore( 7398): 	at android.content.-$$Lambda$ContentResolver$7ILY1SWNxC2xhk-fQUG6tAXW9Ik.call(Unknown Source:10)
    W/MediaStore( 7398): 	at android.graphics.ImageDecoder$CallableSource.createImageDecoder(ImageDecoder.java:550)
    W/MediaStore( 7398): 	at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1847)
    W/MediaStore( 7398): 	at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1840)
    W/MediaStore( 7398): 	at android.content.ContentResolver.loadThumbnail(ContentResolver.java:3622)
    W/MediaStore( 7398): 	at android.content.ContentResolver.loadThumbnail(ContentResolver.java:3606)
    W/MediaStore( 7398): 	at android.provider.MediaStore$InternalThumbnails.getThumbnail(MediaStore.java:1579)
    W/MediaStore( 7398): 	at android.provider.MediaStore$Images$Thumbnails.getThumbnail(MediaStore.java:1938)
    W/MediaStore( 7398): 	at carnegietechnologies.gallery_saver.FileUtils.insertImage(FileUtils.kt:80)
    W/MediaStore( 7398): 	at carnegietechnologies.gallery_saver.GallerySaver$saveMediaFile$1$success$1.invokeSuspend(GallerySaver.kt:69)
    W/MediaStore( 7398): 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    W/MediaStore( 7398): 	at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:238)
    W/MediaStore( 7398): 	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594)
    W/MediaStore( 7398): 	at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
    W/MediaStore( 7398): 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:742)
    E/AndroidRuntime( 7398): FATAL EXCEPTION: main
    E/AndroidRuntime( 7398): Process: com.package.name, PID: 7398
    E/AndroidRuntime( 7398): java.lang.IllegalStateException: miniThumb must not be null
    E/AndroidRuntime( 7398): 	at carnegietechnologies.gallery_saver.FileUtils.insertImage(FileUtils.kt:83)
    E/AndroidRuntime( 7398): 	at carnegietechnologies.gallery_saver.GallerySaver$saveMediaFile$1$success$1.invokeSuspend(GallerySaver.kt:69)
    E/AndroidRuntime( 7398): 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    E/AndroidRuntime( 7398): 	at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:238)
    E/AndroidRuntime( 7398): 	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594)
    E/AndroidRuntime( 7398): 	at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
    E/AndroidRuntime( 7398): 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:742)
    I/System.out( 7398): (HTTPLog)-Static: isSBSettingEnabled false
    I/System.out( 7398): (HTTPLog)-Static: isSBSettingEnabled false
    I/Process ( 7398): Sending signal. PID: 7398 SIG: 9
    
    

    Here the save function

      static Future<Null> saveFileToLocal(File file) async {
        appLogs("saveFileToLocal ${file.path}");
    
        try {
          //Save file local storage as well.
          final result = await GallerySaver.saveImage(
            file.path,
            albumName:"App Name",
          );
          appLogs("saveFileToLocal result $result");
        } catch (e, s) {
          appLogs("  saveFileToLocal ERROR $e\n$s");
        }
    
        return null;
      }
    

    device info SAMSUNG G973F • RZ8M309W8JJ • android-arm64 • Android 10 (API 29)

    flutter doctor

    [✓] Flutter (Channel beta, v1.14.6, on Mac OS X 10.15.3 19D76, locale en-GB)
     
    [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    [✓] Xcode - develop for iOS and macOS (Xcode 11.3.1)
    [✓] Chrome - develop for the web
    [✓] Android Studio (version 3.5)
    [!] VS Code (version 1.42.1)
        ✗ Flutter extension not installed; install from
          https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
    [✓] Connected device (3 available)
    
    ! Doctor found issues in 1 category.
    
    opened by ProjectAJ14 12
  • Parameter albumName doesn't seem to be working

    Parameter albumName doesn't seem to be working

    I'm trying to save photo into some "albumName":

        await GallerySaver.saveImage(f.absolute.path, albumName: "MyName");
    

    But the file is just among other global photos, no folder or directory MyName is created. The file is plainly stored in "..../Pictures/filename.jpg".

    Version 2.0.3, Google Pixel 2.

    opened by Tomucha 11
  • Allow saving to custom sub folder and naming image

    Allow saving to custom sub folder and naming image

    Hi,

    Thanks for the plugin , however it would be better if you were able to use it to create a folder in the directory that you save it into.

    i.e. on my phone it saves directly to pictures and it would be good if it could either create or have a function to create a sub directory that it uses for saving i.e. pictures/MyApp

    Also being able to name the saved image would be good,

    enhancement 
    opened by MitchellQ 11
  • Can't save file on Android and app crashed

    Can't save file on Android and app crashed

    I have below code:

    try {
          var image = await ImagePicker.pickImage(source: ImageSource.camera);
          var path = GallerySaver.saveImage(image.path);
          developer.log('path $path');
        } catch (err) {
          developer.log('failed to take photo', error: err);
        }
    

    and app crashed on GallerySaver.saveImage(image.path);. The error I got is:

    E/AndroidRuntime(17754): FATAL EXCEPTION: main
    E/AndroidRuntime(17754): Process: com.example.rent_exp_app, PID: 17754
    E/AndroidRuntime(17754): android.database.sqlite.SQLiteException: table thumbnails has no column named relative_path (code 1 SQLITE_ERROR): , while compiling: INSERT INTO thumbnails (height,image_id,kind,_data,width,relative_path) VALUES (?,?,?,?,?,?)
    E/AndroidRuntime(17754): 	at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
    E/AndroidRuntime(17754): 	at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:141)
    E/AndroidRuntime(17754): 	at android.content.ContentProviderProxy.insert(ContentProviderNative.java:549)
    E/AndroidRuntime(17754): 	at android.content.ContentResolver.insert(ContentResolver.java:2083)
    E/AndroidRuntime(17754): 	at android.content.ContentResolver.insert(ContentResolver.java:2045)
    

    It seems that it failed to save thumbnails to SQLite database.

    opened by zhaoyi0113 8
  • 'gallery_saver/gallery_saver-Swift.h' file not found

    'gallery_saver/gallery_saver-Swift.h' file not found

    I added gallery_saver to my project, and got an error as below when building iOS app.

    ** BUILD FAILED ** Xcode's output: ↳ === BUILD TARGET sqflite OF PROJECT Pods WITH CONFIGURATION Debug === /Users/Ranyzhang/WorkSpace/Flutter/flutter/.pub-cache/hosted/pub.dartlang.org/gallery_saver-1.0.1/ios/Classes/GallerySaverPlugin.m:2:9: fatal error: 'gallery_saver/gallery_saver-Swift.h' file not found

    #import <gallery_saver/gallery_saver-Swift.h>
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.`
    
    wait-for-customer-response 
    opened by rathinho 8
  • Fatal exception SIG: 9 on Android

    Fatal exception SIG: 9 on Android

    When saving an image, this null pointer exception kills the app. Android, latest version of this package.

    E/AndroidRuntime(16565): FATAL EXCEPTION: main
    E/AndroidRuntime(16565): Process: com.marco.faceroom_test2, PID: 16565
    E/AndroidRuntime(16565): java.lang.NullPointerException
    E/AndroidRuntime(16565): 	at carnegietechnologies.gallery_saver.GallerySaver.finishWithSuccess(GallerySaver.kt:77)
    E/AndroidRuntime(16565): 	at carnegietechnologies.gallery_saver.GallerySaver.access$finishWithSuccess(GallerySaver.kt:16)
    E/AndroidRuntime(16565): 	at carnegietechnologies.gallery_saver.GallerySaver$saveMediaFile$1.invokeSuspend(GallerySaver.kt:72)
    E/AndroidRuntime(16565): 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    E/AndroidRuntime(16565): 	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
    E/AndroidRuntime(16565): 	at android.os.Handler.handleCallback(Handler.java:938)
    E/AndroidRuntime(16565): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(16565): 	at android.os.Looper.loop(Looper.java:223)
    E/AndroidRuntime(16565): 	at android.app.ActivityThread.main(ActivityThread.java:7664)
    E/AndroidRuntime(16565): 	at java.lang.reflect.Method.invoke(Native Method)
    E/AndroidRuntime(16565): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    E/AndroidRuntime(16565): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
    I/Process (16565): Sending signal. PID: 16565 SIG: 9
    
    
    opened by marcoberetta96 7
  • Android SDK 30 - albumName is ignored when saving videos

    Android SDK 30 - albumName is ignored when saving videos

    When building for Android SDK 30, the albumName parameter of GallerySaver.saveVideo does not work. The video is saved to the Movies-folder without any album. GallerySaver.saveImage is working fine.

    opened by m-schmailzl 6
  • Android App crashing with while saving the image path on gallery_saver

    Android App crashing with while saving the image path on gallery_saver

    I have facing the below error while am saving the images on android using this plugin,

    E/AndroidRuntime( 8194): FATAL EXCEPTION: DefaultDispatcher-worker-1
    E/AndroidRuntime( 8194): Process: com.ventechsolutions.myFHB, PID: 8194
    E/AndroidRuntime( 8194): java.io.FileNotFoundException: 19c879d4-6353-48da-bccf-6f93cbf4126a.jpg: open failed: ENOENT (No such file or directory)
    E/AndroidRuntime( 8194): 	at libcore.io.IoBridge.open(IoBridge.java:496)
    E/AndroidRuntime( 8194): 	at java.io.FileInputStream.<init>(FileInputStream.java:159)
    E/AndroidRuntime( 8194): 	at carnegietechnologies.gallery_saver.FileUtils.getBytesFromFile(FileUtils.kt:216)
    E/AndroidRuntime( 8194): 	at carnegietechnologies.gallery_saver.FileUtils.insertImage(FileUtils.kt:47)
    E/AndroidRuntime( 8194): 	at carnegietechnologies.gallery_saver.GallerySaver$saveMediaFile$1$success$1.invokeSuspend(GallerySaver.kt:69)
    E/AndroidRuntime( 8194): 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    E/AndroidRuntime( 8194): 	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
    E/AndroidRuntime( 8194): 	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    E/AndroidRuntime( 8194): 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
    E/AndroidRuntime( 8194): 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    E/AndroidRuntime( 8194): 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    E/AndroidRuntime( 8194): Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
    E/AndroidRuntime( 8194): 	at libcore.io.Linux.open(Native Method)
    E/AndroidRuntime( 8194): 	at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
    E/AndroidRuntime( 8194): 	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
    E/AndroidRuntime( 8194): 	at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
    E/AndroidRuntime( 8194): 	at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7499)
    E/AndroidRuntime( 8194): 	at libcore.io.IoBridge.open(IoBridge.java:482)
    E/AndroidRuntime( 8194): 	... 10 more
    I/Process ( 8194): Sending signal. PID: 8194 SIG: 9
    Lost connection to device.
    Exited (sigterm)
    

    here I have attached my flutter doctor summary,

    [√] Flutter (Channel stable, 1.20.3, on Microsoft Windows [Version 10.0.18363.959], locale en-IN) • Flutter version 1.20.3 at C:\flutter_config\flutter • Framework revision 216dee60c0 (7 days ago), 2020-09-01 12:24:47 -0700
    • Engine revision d1bc06f032 • Dart version 2.9.2

    [√] Android toolchain - develop for Android devices (Android SDK version
    30.0.0) • Android SDK at C:\Users\vmohan\AppData\Local\Android\sdk • Platform android-30, build-tools 30.0.0 • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01) • All Android licenses accepted.

    [√] Android Studio (version 4.0) • Android Studio at C:\Program Files\Android\Android Studio • Flutter plugin version 48.1.2 • Dart plugin version 193.7361 • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

    [√] VS Code (version 1.48.2) • VS Code at C:\Users\vmohan\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.14.0

    [√] Connected device (1 available) • moto g 7 (mobile) • ZF6224BH73 • android-arm64 • Android 10 (API 29)

    • No issues found!

    opened by mr-techiee 6
  • Android project upgraded

    Android project upgraded

    • Example project migrated to Android flutterEmbedding V2
    • Example project AndroidManifest updated to with EXTERNAL_STORAGE permission definition
    • AGP upgraded
    • Android sdkVersion updated
    opened by luis901101 0
  • saveImage & saveVideo both return Future<bool> instead of the path string

    saveImage & saveVideo both return Future instead of the path string

    Documentation for this lib looks to be incorrect, the below does not return String path

      GallerySaver.saveImage(recordedImage.path).then((String path) {
              setState(() {
                firstButtonText = 'image saved!';
              });
            });
    
    opened by alfietapping 1
  • How to check if image exists in gallery?

    How to check if image exists in gallery?

    I cant detect if the image already exist on the gallery. I don't want to have duplicate image on gallery. How to check if image exists in gallery (iOS and Android)?

    opened by burhanaksendir 0
  • GallerySaver.saveVideo() fails when the video is encoded with x.265 on IOS

    GallerySaver.saveVideo() fails when the video is encoded with x.265 on IOS

    GallerySaver.saveVideo() silently fails when the video is encoded with x.265 on IOS. No errors in the log, but the call returns false. The same video encoded with x.264 works fine IOS and both 265 and 264 work fine in Android. Anyone run into this?

    opened by rlueders 1
  • Please check and remove QUERY_ALL_PACKAGES permission from google recommend

    Please check and remove QUERY_ALL_PACKAGES permission from google recommend

    Please check the permission request to check the access package again. Because the google store does not accept applications. I want to recommend removing permission android.permission.QUERY_ALL_PACKAGES and refactor to support on gallery_saver ^2.3.2

    Screen Shot 2565-08-05 at 15 52 12

    https://support.google.com/googleplay/android-developer/answer/10158779?hl=en

    The QUERY_ALL_PACKAGES permission only takes effect when your app targets Android API level 30 or later on devices running Android 11 or later. To use this permission, your app must fall within permitted uses below, and have a core purpose to search for all apps on the device. You must be able to adequately justify why a less intrusive method of app visibility will not sufficiently enable your app’s policy-compliant user-facing core functionality.

    opened by suttipongk 0
Owner
Carnegie Technologies
Carnegie Technologies
A simple flutter app that downloads a file from the internet, shows a custom-made download progress dialog and saves the file to device's internal storage

http_downloader A simple flutter app that downloads a file from the internet using the http plugin. It has a custom-designed progress dialog which dis

Akora Ing. Debrah Kwesi Buabeng 4 Apr 6, 2021
An app to pick, upload and display images from camera and gallery with size and extension constraints.

image_uploader A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started i

Ehmad Saeed⚡ 4 Mar 7, 2022
Download files from Firebase Storage with Flutter. List all images, videos, or other files from Firebase and download them.

Flutter Tutorial - Download Files From Firebase Storage Download files from Firebase Storage with Flutter. List all images, videos, or other files fro

Johannes Milke 28 Dec 4, 2022
Upload Files To Firebase Storage with Flutter. Pick images, videos, or other files from your device and upload them to Firebase.

Flutter Tutorial - Upload Files To Firebase Storage Upload Files To Firebase Storage with Flutter. Pick images, videos, or other files from your devic

Johannes Milke 30 Dec 28, 2022
Imagepickerweb - A picker with which you can pick images and videos from your Flutter web app

ImagePickerWeb This Web-Plugin allows Flutter Web to pick images (as File, Widget or Uint8List) and videos (as File or Uint8List). Many thanks goes to

Rebar Ahmad 40 Sep 26, 2022
Stories like in Instagram, each story can include multiple images and videos. Package supports video, titles, preliminary caching.

flutter_instagram_stories A Flutter package for displaying stories just like Whatsapp & Instagram. Built-in groups (multiple stories with one icon), c

Alex Awaik 125 Dec 9, 2022
In this repo you will see how to pick images from the image library and also, see how to store the selected images on Firebase.

flutterimageapp Flutter Tutorial - Upload Images using Firebase Storage. Flutter Tutorial - Upload Images using Firebase Storage Video series can be w

Whatsupcoders 60 Nov 4, 2022
Display images flutter - Simple app to display images in flutter

Display Images In Flutter Simple app to display images in a flutter. In this dem

Manish Ahire 1 Jan 29, 2022
camilo velandia 69 Dec 30, 2022
A Video Player For Vimeo Videos in Flutter. This plugin allows us to play video from Vimeo and it supports Android and iOS platforms.

vimeo_video_player A Video Player For Vimeo Videos in Flutter. This plugin allow us to play video from vimeo and it's supports Android and iOS platfor

MindInventory 26 Dec 8, 2022
A Flutter plugin that lists native gallery items.

Media Gallery plugin for Flutter A Flutter plugin that lists native gallery items. Installation First, add media_gallery as a dependency in your pubsp

Aloïs Deniel 84 Dec 7, 2022
A flutter plugin to play Youtube Videos without API Key in range of Quality(144p, 240p,360p,480p,720p and 1080p).

Youtube Player Plugin This plugin is discontinued. Please use youtube_player_flutter which is an officially provided way of playing youtube videos, su

Sarbagya Dhaubanjar 120 Nov 13, 2022
Flutter plugin for playing or streaming YouTube videos inline using the official iFrame Player API

Flutter plugin for playing or streaming YouTube videos inline using the official iFrame Player API. The package exposes almost all the API provided by iFrame Player API. So, it's 100% customizable.

Pratap Singh 0 May 15, 2022
Flutter blue plus - Flutter plugin for connecting and communicationg with Bluetooth Low Energy devices, on Android and iOS

Introduction FlutterBluePlus is a bluetooth plugin for Flutter, a new app SDK to

null 141 Dec 22, 2022
A Flutter sensor plugin which provide easy access to the Pitch and Roll on Android and iOS devices.

Flutter Aeyrium Sensor Plugin Aeyrium Sensor Plugin A Flutter sensor plugin which provide easy access to the Pitch and Roll on Android and iOS devices

Aeyrium 58 Nov 3, 2022
A flutter plugin for retrieving, creating, saving, and watching contacts on native devices

flutter_contact A Flutter plugin to access and manage the device's native contacts. Usage To use this plugin, add flutter_contact as a dependency in y

Sunny 79 Nov 23, 2022
A Flutter plugin for changing the Home Screen, Lock Screen (or both) Wallpaper on Android devices.

wallpaper_manager A Flutter plugin for changing the Home Screen, Lock Screen (or both) Wallpaper(s) on Android devices. Usage Installation In the pubs

Aditya Mulgundkar 38 Nov 28, 2022
Flutterbodydetection - A flutter plugin that uses MLKit on iOS/Android platforms to enable body pose and mask detection using Pose Detection and Selfie Segmentation APIs for both static images and live camera stream.

body_detection A flutter plugin that uses MLKit on iOS/Android platforms to enable body pose and mask detection using Pose Detection and Selfie Segmen

null 18 Dec 5, 2022
its just take image from gallery or camera and save to file (in flutter)

flutter_img_pdf A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

vivek kumar 0 Dec 28, 2021