Giter Club home page Giter Club logo

image_downloader's Introduction

image_downloader

Flutter plugin that downloads images and movies on the Internet and saves to Photo Library on iOS or specified directory on Android.
This will keep Exif(DateTimeOriginal) and GPS(Latitude, Longitude).

Getting Started

ios

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

  • NSPhotoLibraryUsageDescription - Specifies the reason for your app to access the user’s photo library. This is called Privacy - Photo Library Usage Description in the visual editor.
  • NSPhotoLibraryAddUsageDescription - Specifies the reason for your app to get write-only access to the user’s photo library. This is called Privacy - Photo Library Additions Usage Description in the visual editor.

Android

Add this permission in AndroidManifest.xml. (If you call AndroidDestinationType#inExternalFilesDir(), This setting is not necessary.)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Example

Basic

try {
  // Saved with this method.
  var imageId = await ImageDownloader.downloadImage("https://raw.githubusercontent.com/wiki/ko2ic/image_downloader/images/flutter.png");
  if (imageId == null) {
    return;
  }

  // Below is a method of obtaining saved image information.
  var fileName = await ImageDownloader.findName(imageId);
  var path = await ImageDownloader.findPath(imageId);
  var size = await ImageDownloader.findByteSize(imageId);
  var mimeType = await ImageDownloader.findMimeType(imageId);
} on PlatformException catch (error) {
  print(error);
}

The return value is as follows.

  • imageId of the saved image if saving succeeded.
  • null if not been granted permission.
  • Otherwise it is a PlatformException.

Custom

You can specify the storage location.
(Currently, external storage is only supported on Android.)

Three directories by default are provided.

  • AndroidDestinationType.directoryDownloads -> Environment.DIRECTORY_DOWNLOADS on Android
  • AndroidDestinationType.directoryPictures -> Environment.DIRECTORY_PICTURES on Android
  • AndroidDestinationType.directoryDCIM -> Environment.DIRECTORY_DCIM on Android
  • AndroidDestinationType.directoryMovies -> Environment.DIRECTORY_MOVIES on Android

In addition, there is also custom.

For example, the following sources is stored in /storage/emulated/0/sample/custom/sample.gif.
(Depends on the device.)

await ImageDownloader.downloadImage(url,
                                    destination: AndroidDestinationType.custom('sample')                                  
                                    ..subDirectory("custom/sample.gif"),
        );

For example, the following sources is stored in /storage/emulated/0/Android/data/<applicationId>/files/sample/custom/sample.gifby calling inExternalFilesDir() .
(Depends on the device.)

 await ImageDownloader.downloadImage(url,
                                     destination: AndroidDestinationType.custom('sample')
                                     ..inExternalFilesDir()
                                     ..subDirectory("custom/sample.gif"),
         );

Note: inExternalFilesDir() will not require WRITE_EXTERNAL_STORAGE permission, but downloaded images will also be deleted when uninstalling.

Progress

You can get the progress value.
Note: On iOS, onProgressUpdate cannot get imageId.

  @override
  void initState() {
    super.initState();

    ImageDownloader.callback(onProgressUpdate: (String imageId, int progress) {
      setState(() {
        _progress = progress;
      });
    });
  }

Downloading multiple files

You can do it simply by using await .

var list = [
  "https://raw.githubusercontent.com/wiki/ko2ic/image_downloader/images/bigsize.jpg",
  "https://raw.githubusercontent.com/wiki/ko2ic/image_downloader/images/flutter.jpg",
  "https://raw.githubusercontent.com/wiki/ko2ic/image_downloader/images/flutter_transparent.png",
  "https://raw.githubusercontent.com/wiki/ko2ic/flutter_google_ad_manager/images/sample.gif",
  "https://raw.githubusercontent.com/wiki/ko2ic/image_downloader/images/flutter_no.png",
  "https://raw.githubusercontent.com/wiki/ko2ic/image_downloader/images/flutter.png",
];

List<File> files = [];

for (var url in list) {
  try {
    var imageId = await ImageDownloader.downloadImage(url);
    var path = await ImageDownloader.findPath(imageId);
    files.add(File(path));
  } catch (error) {
    print(error);
  }
}
setState(() {
  _mulitpleFiles.addAll(files);
});

Preview

There is a open method to be able to immediately preview the download file.
If you call it, in the case of ios, a preview screen using UIDocumentInteractionController is displayed. In case of Android, it is displayed by Intent.

var imageId = await ImageDownloader.downloadImage(url);
var path = await ImageDownloader.findPath(imageId);
await ImageDownloader.open(path);

Note: in the case of android, to use this feature, the following settings are required.

Add the following within <application> tag in AndroidManifest.xml .

        <provider
                android:name="com.ko2ic.imagedownloader.FileProvider"
                android:authorities="${applicationId}.image_downloader.provider"
                android:exported="false"
                android:grantUriPermissions="true">
            <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_paths"/>
        </provider>

Add provider_paths.xml in android/app/src/main/res/xml/ .

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

Error Handling

downloadImage()

You can determine the type of error with PlatformException#code.

In the case of HTTP status error, the code is stored.
In the case of the file format is not supported, unsupported_file is stored.
There is an important point in the case of unsupported_file.
Even unsupported files are stored in a temporary directory.
It can be retrieved with error.details ["unsupported_file_path"]; .
Note: it will be deleted when you exit the app.

ImageDownloader.downloadImage(url).catchError((error) {
  if (error is PlatformException) {
    var path = "";
    if (error.code == "404") {
      print("Not Found Error.");
    } else if (error.code == "unsupported_file") {
      print("UnSupported FIle Error.");
      path = error.details["unsupported_file_path"];
    }
  }
})

open()

If the file can not be previewed, the preview_error is stored in the code.

  await ImageDownloader.open(_path).catchError((error) {
    if (error is PlatformException) {
      if (error.code == "preview_error") {
        print(error.message);
      }
    }    
  });

Trouble Shooting

https://github.com/ko2ic/image_downloader/wiki#trouble-shooting

image_downloader's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

image_downloader's Issues

Execution failed for task ':image_downloader:compileReleaseKotlin'.

I am using Image downloader 0.19.0.
Every time I try to compile my app i got the foolowing error

`e: C:\Users\admin\AppData\Roaming\Pub\Cache\hosted\pub.dartlang.org\image_downloader-0.19.0\android\src\main\kotlin\com\ko2ic\imagedownloader\ImageDownloaderPlugin.kt: (355, 41): Unresolved reference: random

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':image_downloader:compileReleaseKotlin'.

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`

If it calls continuously, an error occurs.

This is a continuation of #14 .

@kraster010 wrote:

I've tried it only on Android.

Basically a server send me a set of images link which i then try to download. here the snippet. there are about 10 images in the framePath array.

for(var elem in video.framePaths){
    try{
        await ImageDownloader.downloadImage(api.getImageUrl(elem));
    } catch(_) {
        print("can't download image $elem");
    }
 }

The links are only available for 5 minutes so if you try to get the image now you will get a 404. but when the link is valid and i try to download the image this stacktrace happens:
(maybe it downloads 4 out 10 images then it crashes, sometimes 1 out 10, sometimes 2 out 10. but everytime the app crashes)

This is the stacktrace:
10:49:27.589 105 info flutter.tools D/image_downloader( 3777): RequestResult(id=22, remoteUri=https://mobile.powerseriesneogo.com/mobile-api/rest/session/56f18efb-b228-4e52-bbb6-8df301ee85bf/video/file/1221018012_1554837934000_12_10_1.jpg, localUri=file:///storage/emulated/0/Download/2019-04-10.10.49.039, mediaType=image/jpeg, totalSize=3434, title=2019-04-10.10.49.039, description=)
10:49:27.589 106 info flutter.tools D/AndroidRuntime( 3777): Shutting down VM
10:49:27.606 107 info flutter.tools E/AndroidRuntime( 3777): FATAL EXCEPTION: main
10:49:27.606 108 info flutter.tools E/AndroidRuntime( 3777): Process: com.dsc.powerneo, PID: 3777
10:49:27.606 109 info flutter.tools E/AndroidRuntime( 3777): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=com.dsc.powerneo (has extras) } in com.ko2ic.imagedownloader.Downloader$execute$1@2a076ee
10:49:27.606 110 info flutter.tools E/AndroidRuntime( 3777): at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1401)
10:49:27.606 111 info flutter.tools E/AndroidRuntime( 3777): at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
10:49:27.606 112 info flutter.tools E/AndroidRuntime( 3777): at android.os.Handler.handleCallback(Handler.java:873)
10:49:27.606 113 info flutter.tools E/AndroidRuntime( 3777): at android.os.Handler.dispatchMessage(Handler.java:99)
10:49:27.606 114 info flutter.tools E/AndroidRuntime( 3777): at android.os.Looper.loop(Looper.java:193)
10:49:27.606 115 info flutter.tools E/AndroidRuntime( 3777): at android.app.ActivityThread.main(ActivityThread.java:6669)
10:49:27.606 116 info flutter.tools E/AndroidRuntime( 3777): at java.lang.reflect.Method.invoke(Native Method)
10:49:27.606 117 info flutter.tools E/AndroidRuntime( 3777): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
10:49:27.606 118 info flutter.tools E/AndroidRuntime( 3777): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
10:49:27.606 119 info flutter.tools E/AndroidRuntime( 3777): Caused by: java.lang.IllegalStateException: newMimeType must not be null
10:49:27.606 120 info flutter.tools E/AndroidRuntime( 3777): at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl$granted$3.invoke(ImageDownloaderPlugin.kt:223)
10:49:27.606 121 info flutter.tools E/AndroidRuntime( 3777): at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl$granted$3.invoke(ImageDownloaderPlugin.kt:155)
10:49:27.606 122 info flutter.tools E/AndroidRuntime( 3777): at com.ko2ic.imagedownloader.Downloader.resolveDownloadStatus(Downloader.kt:125)
10:49:27.606 123 info flutter.tools E/AndroidRuntime( 3777): at com.ko2ic.imagedownloader.Downloader.access$resolveDownloadStatus(Downloader.kt:12)
10:49:27.606 124 info flutter.tools E/AndroidRuntime( 3777): at com.ko2ic.imagedownloader.Downloader$execute$1.onReceive(Downloader.kt:31)
10:49:27.606 125 info flutter.tools E/AndroidRuntime( 3777): at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1391)
10:49:27.606 126 info flutter.tools E/AndroidRuntime( 3777): ... 8 more
10:49:27.606 127 info flutter.tools I/Process ( 3777): Sending signal. PID: 3777 SIG: 9

let me know if you need something more

CursorIndexOutOfBoundsException

Describe the bug
A crash was registered in Google Play from one of the users of my app.

Error Log

java.lang.RuntimeException: 
  at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args (LoadedApk.java:1560)
  at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run (Unknown Source:2)
  at android.os.Handler.handleCallback (Handler.java:883)
  at android.os.Handler.dispatchMessage (Handler.java:100)
  at android.os.Looper.loop (Looper.java:214)
  at android.app.ActivityThread.main (ActivityThread.java:7356)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930)
Caused by: android.database.CursorIndexOutOfBoundsException: 
  at android.database.AbstractCursor.checkPosition (AbstractCursor.java:515)
  at android.database.AbstractWindowedCursor.checkPosition (AbstractWindowedCursor.java:138)
  at android.database.AbstractWindowedCursor.getString (AbstractWindowedCursor.java:52)
  at android.database.CursorWrapper.getString (CursorWrapper.java:141)
  at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl.saveToDatabase (ImageDownloaderPlugin.kt:348)
  at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl.access$saveToDatabase (ImageDownloaderPlugin.kt:200)
  at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl$granted$3.invoke (ImageDownloaderPlugin.kt:301)
  at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl$granted$3.invoke (ImageDownloaderPlugin.kt:200)
  at com.ko2ic.imagedownloader.Downloader.resolveDownloadStatus (Downloader.kt:171)
  at com.ko2ic.imagedownloader.Downloader.access$resolveDownloadStatus (Downloader.kt:14)
  at com.ko2ic.imagedownloader.Downloader$execute$1.onReceive (Downloader.kt:33)
  at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args (LoadedApk.java:1550)

Flutter Version details
Flutter v1.9.1+hotfix.4

Cant install Plugin in pubspec.yaml AndroidX Incompatibilities

I try to install this plugin in pubspec.yaml but getting this error :

e: C:\flutter\flutter\.pub-cache\hosted\pub.dartlang.org\image_downloader-0.19.0\android\src\main\kotlin\com\ko2ic\imagedownloader\ImageDownloaderPlugin.kt: (355, 41): Unresolved reference: random

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':image_downloader: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 24s
Gradle task assembleDebug failed with exit code 1
Exited (sigterm)

I have already :

flutter clean
uninstall app in my device and install again this plugin

Can you help me with this ?

Could not instantiate image codec

I'm using 0.19.0 version
When I try to download this video https://drive.google.com/file/d/1K-ZKOHX48pkd4QZuB18TvpkfLUl4rr5T/view (I shared it in google drive so you can download it and try).

For other videos I have no problem.

════════ Exception caught by image resource service ════════════════════════════════════════════════
The following _Exception was thrown resolving an image codec:
Exception: Could not instantiate image codec.

When the exception was thrown, this was the stack:
#0 _futurize (dart:ui/painting.dart:4134:5)
#1 instantiateImageCodec (dart:ui/painting.dart:1669:10)
#2 PaintingBinding.instantiateImageCodec (package:flutter/src/painting/binding.dart:74:12)
#3 FileImage._loadAsync (package:flutter/src/painting/image_provider.dart:545:43)

...
Path: /storage/emulated/0/Download/b8687ac25945102ff373a0a50d3fbf6239ce5bb4c57784d02f700effb8579096
════════════════════════════════════════════════════════════════════════════════════════════════════

[✓] Flutter (Channel stable, v1.9.1+hotfix.2, on Mac OS X 10.14.6 18G87, locale it-IT)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 10.3)
[✓] Android Studio (version 3.5)
[✓] IntelliJ IDEA Community Edition (version 2019.2.2)
[✓] VS Code (version 1.37.1)
[✓] Connected device (1 available)

• No issues found!

Variant that takes bytes rather than a URL

It would be great if there was a way to save a file that you already have available. For example, if you download the bytes for an image that you display, and the user says "save to disk", being able to pass the bytes to this plugin so that the image appears in their photo gallery.

IOS build error

flutter/.pub-cache/hosted/pub.dartlang.org/image_downloader-0.9.1/ios/Classes/ImageDownloaderPlugin.m:2:9: fatal error: 'image_downloader/image_downloader-Swift.h' file not found
#import <image_downloader/image_downloader-Swift.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

Could not build the application for the simulator.
Error launching application on iPhone XR.

Assets Floder image Download

i want to download image from assets: folder image . how can do this using your library?. currently it just download image from URL only ..

Can't download image from API Url (localhost)

Hello, i got some problem with download image from API Url. I have Url like this http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, I can see the image but when i try download it ,my console give me infinite loop like this and my image not downloaded :

D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
D/image_downloader(21091): RequestResult(id=798, remoteUri=http://192.168.43.159/flutter-news/images/berita/92dae9b51087d930a32aff53eaded163.jpg, localUri=null, mediaType=null, totalSize=-1, title=, description=)
D/image_downloader(21091): 0
Application finished.
Exited (sigterm)

My simple download code like this :

Future testingDownloadImage(String imageUrl) async {
    try {
      var imageId =
          await ImageDownloader.downloadImage('$baseURLimage/berita/$imageUrl');
      if (imageId == null) {
        print('Image Kosong');
      }
      var fileName = await ImageDownloader.findName(imageId);
      var path = await ImageDownloader.findPath(imageId);
      var size = await ImageDownloader.findByteSize(imageId);
      var mimeType = await ImageDownloader.findMimeType(imageId);
      print(imageId);
      print(fileName);
      print(path);
      print(size);
      print(mimeType);
    } catch (e) {
      print(e);
      return null;
    }
  }

Main.dart

void _testingDownloadImage(String imageUrl) async {
    var downloadImage = api.testingDownloadImage(imageUrl);
    print(downloadImage);
    if (downloadImage != null) {
      print('success');
    } else {
      print('failed');
    }
  }
 IconButton(
                                    onPressed: () => _testingDownloadImage(
                                        widget.gambarBerita),
                                    icon: Icon(Icons.save),
                                  ),

I'm already read this issue :
Github Issue 400
Stackoverflow

but result is nothing,I'm mistake something ?

Btw , if i'm using default Url documentation Image Default, Everything it's ok.

Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection

the ios still have this problem,i set info.plist already
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>***.com</key> <dict> <key>NSExceptionAllowInsecureHTTPLoads</key> <true/> </dict> </dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSAllowsArbitraryLoadsInWebContent</key> <true/> </dict>
Flutter (Channel stable, v1.12.13+hotfix.8, on Mac OS X 10.14.6 18G3020, locale zh-Hans-CN)
• Flutter version 1.12.13+hotfix.8 at /Users/iosappjingda/Documents/flutter
• Framework revision 0b8abb4724 (6 weeks ago), 2020-02-11 11:44:36 -0800
• Engine revision e1e6ced81d
• Dart version 2.7.0

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
• Android SDK at /Users/iosappjingda/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-29, build-tools 29.0.2
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
• All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.3.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 11.3.1, Build version 11C504
• CocoaPods version 1.8.4

[✓] Android Studio (version 3.5)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 43.0.1
• Dart plugin version 191.8593
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

PHPhoto (ios) and MediaStore (android) are not triggered

Hi,
I'm using this plugin in combination with flutter_photo and I noticed a strange behaviour that can be related to both libraries: if I download a picture using your plugin, it doesn't always appear in the list of recent pictures of flutter_photo (they randomly do). They show there if I manually rename them from the File Manager.

I opened an issue over there and the developer explained that the library actually is based on PHPhoto (ios) and MediaStore (android) so a conclusion might be that your plugin doesn't trigger them.
May that be possible?

Thanks

all Medias In folder get deleted after uninstall

First, thank you for this package.

I'm facing an issue where after uninstalling the app on android the folder with medias on it get deleted here the code im using
final downloadId = await ImageDownloader.downloadImage(url, destination: AndroidDestinationType.custom(directory: 'TestFolder')..subDirectory("$rndName.mp4"));
is me doing something wrong is problem on the package ??

IOS build error, need 'SWIFT_VERSION'

Wanna run on IOS emulator(iphone xr), and I got these:

Launching lib/main.dart on iPhone XR in debug mode...
Running pod install...
CocoaPods' output:

Preparing

Analyzing dependencies

Inspecting targets to integrate
  Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)

Finding Podfile changes
  A image_downloader
  - Flutter
  - device_info
  - fluttertoast
  - package_info
  - path_provider
  - shared_preferences
  - sqflite

Fetching external sources
-> Fetching podspec for `Flutter` from `.symlinks/flutter/ios`
-> Fetching podspec for `device_info` from `.symlinks/plugins/device_info/ios`
-> Fetching podspec for `fluttertoast` from `.symlinks/plugins/fluttertoast/ios`
-> Fetching podspec for `image_downloader` from `.symlinks/plugins/image_downloader/ios`
-> Fetching podspec for `package_info` from `.symlinks/plugins/package_info/ios`
-> Fetching podspec for `path_provider` from `.symlinks/plugins/path_provider/ios`
-> Fetching podspec for `shared_preferences` from `.symlinks/plugins/shared_preferences/ios`
-> Fetching podspec for `sqflite` from `.symlinks/plugins/sqflite/ios`

Resolving dependencies of `Podfile`

Comparing resolved specification to the sandbox manifest
  A FMDB
  A Flutter
  A device_info
  A fluttertoast
  A image_downloader
  A package_info
  A path_provider
  A shared_preferences
  A sqflite

Downloading dependencies

-> Installing FMDB (2.7.5)
  > Copying FMDB from `/Users/luyusheng/Library/Caches/CocoaPods/Pods/Release/FMDB/2.7.5-2ce00` to `Pods/FMDB`

-> Installing Flutter (1.0.0)

-> Installing device_info (0.0.1)

-> Installing fluttertoast (0.0.2)

-> Installing image_downloader (0.0.1)

-> Installing package_info (0.0.1)

-> Installing path_provider (0.0.1)

-> Installing shared_preferences (0.0.1)

-> Installing sqflite (0.0.1)
  - Running pre install hooks
[!] Unable to determine Swift version for the following pods:

- `image_downloader` does not specify a Swift version and none of the targets (`Runner`) integrating it have the `SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at least one of the targets that integrate this pod.

/usr/local/Cellar/cocoapods/1.6.1/libexec/gems/cocoapods-1.6.1/lib/cocoapods/installer/xcode/target_validator.rb:115:in `verify_swift_pods_swift_version'
/usr/local/Cellar/cocoapods/1.6.1/libexec/gems/cocoapods-1.6.1/lib/cocoapods/installer/xcode/target_validator.rb:37:in `validate!'
/usr/local/Cellar/cocoapods/1.6.1/libexec/gems/cocoapods-1.6.1/lib/cocoapods/installer.rb:459:in `validate_targets'
/usr/local/Cellar/cocoapods/1.6.1/libexec/gems/cocoapods-1.6.1/lib/cocoapods/installer.rb:138:in `install!'
/usr/local/Cellar/cocoapods/1.6.1/libexec/gems/cocoapods-1.6.1/lib/cocoapods/command/install.rb:48:in `run'
/usr/local/Cellar/cocoapods/1.6.1/libexec/gems/claide-1.0.2/lib/claide/command.rb:334:in `run'
/usr/local/Cellar/cocoapods/1.6.1/libexec/gems/cocoapods-1.6.1/lib/cocoapods/command.rb:52:in `run'
/usr/local/Cellar/cocoapods/1.6.1/libexec/gems/cocoapods-1.6.1/bin/pod:55:in `<top (required)>'
/usr/local/Cellar/cocoapods/1.6.1/libexec/bin/pod:22:in `load'
/usr/local/Cellar/cocoapods/1.6.1/libexec/bin/pod:22:in `<main>'

Error output from CocoaPods:

[!] Automatically assigning platform `ios` with version `8.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

Error running pod install
Error launching application on iPhone XR.

seems like image_downloader goes wrong?

- `image_downloader` does not specify a Swift version and none of the targets (`Runner`) integrating it have the `SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at least one of the targets that integrate this pod.

Failed in build release. 'Could not resolve project :image_downloader.'

Hi there!
Everything works fine in debug mode of app, but when I tried to build release, this error came out. Hope you can take some time to help me. :)
Error Log

[        ] FAILURE: Build failed with an exception.
[   +2 ms] * What went wrong:
[        ] Execution failed for task ':app:lintVitalRelease'.
[        ] > Could not resolve all artifacts for configuration ':app:dynamicProfileRuntimeClasspath'.
[   +1 ms]    > Could not resolve project :image_downloader.
[   +1 ms]      Required by:
[        ]          project :app
[        ]       > java.lang.NullPointerException (no error message)
[        ] * Try:
[        ] Run with --info or --debug option to get more log output. Run with --scan to get full insights.
[        ] * Exception is:
[        ] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:lintVitalRelease'.

Flutter doctor: (I'm using Android Studio)

[√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 10.0.17763.379], locale zh-CN)
[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[√] Android Studio (version 3.3)
[!] IntelliJ IDEA Ultimate Edition (version 2018.3)
    X Flutter plugin not installed; this adds Flutter specific functionality.
    X Dart plugin not installed; this adds Dart specific functionality.
[√] Connected device (1 available)

error: definition of 'ImageDownloaderPlugin' must be imported from module 'image_downloader.ImageDownloaderPlugin' before it is required

Launching lib/main.dart on iPhone 11 in debug mode...
Running pod install...
Running Xcode build...
Xcode build done.                                            4.2s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **


Xcode's output:
↳
    === BUILD TARGET wakelock OF PROJECT Pods WITH CONFIGURATION Debug ===
    /user/.pub-cache/hosted/pub.dartlang.org/image_downloader-0.19.2/ios/Classes/ImageDownloaderPlugin.m:4:17: error: definition of 'ImageDownloaderPlugin' must be imported from module 'image_downloader.ImageDownloaderPlugin' before it is required
    @implementation ImageDownloaderPlugin
                    ^
    In module 'image_downloader' imported from /user/.pub-cache/hosted/pub.dartlang.org/image_downloader-0.19.2/ios/Classes/ImageDownloaderPlugin.m:2:
    /user/project/build/ios/Debug-iphonesimulator/image_downloader/image_downloader.framework/Headers/ImageDownloaderPlugin.h:3:12: note: previous definition is here
    @interface ImageDownloaderPlugin : NSObject<FlutterPlugin>
               ^
    1 error generated.

Could not build the application for the simulator.
Error launching application on iPhone 11.

jpegData has been renamed to UIImageJPEGRepresentation

Build failed because of following error : (

error: 'jpegData(compressionQuality:)' has been renamed to 'UIImageJPEGRepresentation(::)'
let jpegData = newImage.jpegData(compressionQuality: 1.0)!
^~~~~~~~
UIImageJPEGRepresentation
UIKit.UIImage:60:17: note: 'jpegData(compressionQuality:)' was introduced in Swift 4.2
public func jpegData(compressionQuality: CGFloat) -> Data?

Integrating the plugin causes gradle failture immediately

Launching lib\main.dart on Android SDK built for x86 in debug mode...

  • Error running Gradle:
    ProcessException: Process "C:\Users\boood\AndroidStudioProjects\firebase_neten\android\gradlew.bat" exited abnormally:

Configure project :app
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Command: C:\Users\boood\AndroidStudioProjects\firebase_neten\android\gradlew.bat app:properties

Please review your Gradle project setup in the android/ folder.
Exited (sigterm)

Problem after install the component

Hello how are you? When I install image_downloader 0.18.1, I get several warnings and an error as follows:

Launching lib/main.dart on iPhone Xʀ in debug mode...

Running pod install...

Running Xcode build...

Xcode build done. 145,6s

Failed to build iOS app

Error output from Xcode build:

** BUILD FAILED **

Xcode's output:

warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'BoringSSL-GRPC')

warning: The iOS Simulator deployment target is set to 4.3, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'FMDB')

warning: The iOS Simulator deployment target is set to 4.3, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'nanopb')

warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'GTMSessionFetcher')

warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'gRPC-C++-gRPCCertificates-Cpp')

warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'Protobuf')

warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'gRPC-Core')

warning: The iOS Simulator deployment target is set to 5.0, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'leveldb-library')

warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'gRPC-C++')

warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.4.99. (in target 'Flutter')

/Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:101:9: warning: 'dispatch_queue_set_specific' is only available on iOS 5.0 or newer [-Wunguarded-availability]

        dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL);

        ^~~~~~~~~~~~~~~~~~~~~~~~~~~

In module 'Foundation' imported from /Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:9:

In module 'CoreFoundation' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.4.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:6:

In module 'Dispatch' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.4.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h:20:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.4.sdk/usr/include/dispatch/queue.h:1352:1: note: 'dispatch_queue_set_specific' has been marked as being introduced in iOS 5.0 here, but the deployment target is iOS 4.3.0

dispatch_queue_set_specific(dispatch_queue_t queue, const void *key,

^

/Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:101:9: note: enclose 'dispatch_queue_set_specific' in an @available check to silence this warning

        dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL);

        ^~~~~~~~~~~~~~~~~~~~~~~~~~~

/Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:184:54: warning: 'dispatch_get_specific' is only available on iOS 5.0 or newer [-Wunguarded-availability]

    FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);

                                                     ^~~~~~~~~~~~~~~~~~~~~

In module 'Foundation' imported from /Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:9:

In module 'CoreFoundation' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.4.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:6:

In module 'Dispatch' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.4.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h:20:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.4.sdk/usr/include/dispatch/queue.h:1408:1: note: 'dispatch_get_specific' has been marked as being introduced in iOS 5.0 here, but the deployment target is iOS 4.3.0

dispatch_get_specific(const void *key);

^

/Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:184:54: note: enclose 'dispatch_get_specific' in an @available check to silence this warning

    FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);

                                                     ^~~~~~~~~~~~~~~~~~~~~

2 warnings generated.

/Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1486:15: warning: 'sqlite3_wal_checkpoint_v2' is only available on iOS 5.0 or newer [-Wunguarded-availability]

    int err = sqlite3_wal_checkpoint_v2(_db, dbName, checkpointMode, logFrameCount, checkpointCount);

              ^~~~~~~~~~~~~~~~~~~~~~~~~

In module 'SQLite3' imported from /Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabase.m:8:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.4.sdk/usr/include/sqlite3.h:8245:16: note: 'sqlite3_wal_checkpoint_v2' has been marked as being introduced in iOS 5.0 here, but the deployment target is iOS 4.3.0

SQLITE_API int sqlite3_wal_checkpoint_v2(

               ^

/Users/evertoncoimbradearaujo/desin/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1486:15: note: enclose 'sqlite3_wal_checkpoint_v2' in an @available check to silence this warning

    int err = sqlite3_wal_checkpoint_v2(_db, dbName, checkpointMode, logFrameCount, checkpointCount);

              ^~~~~~~~~~~~~~~~~~~~~~~~~

1 warning generated.

/Users/evertoncoimbradearaujo/flutter/.pub-cache/hosted/pub.dartlang.org/image_downloader-0.18.1/ios/Classes/ImageDownloaderPlugin.m:4:17: error: definition of 'ImageDownloaderPlugin' must be imported from module 'image_downloader.ImageDownloaderPlugin' before it is required

@implementation ImageDownloaderPlugin

                ^

In module 'image_downloader' imported from /Users/evertoncoimbradearaujo/flutter/.pub-cache/hosted/pub.dartlang.org/image_downloader-0.18.1/ios/Classes/ImageDownloaderPlugin.m:2:

/Users/evertoncoimbradearaujo/desin/build/ios/Debug-iphonesimulator/image_downloader/image_downloader.framework/Headers/ImageDownloaderPlugin.h:3:12: note: previous definition is here

@interface ImageDownloaderPlugin : NSObject<FlutterPlugin>

           ^

1 error generated.

Runner-cdvhsshslrzaizeuefipigqspnal

note: Using new build systemnote: Planning buildnote: Constructing build description

Could not build the application for the simulator.

Error launching application on iPhone Xʀ.

Can you help me please?

Thanks

Execution failed for task ':image_downloader:compileDebugKotlin'.

I have defined this in pubspec.yaml
image_downloader: ^0.16.2
when i run my project this error comes everytime:

  • What went wrong:
    Execution failed for task ':image_downloader: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 15s
Finished with error: Gradle task assembleDebug failed with exit code 1

Execution failed for task ':image_downloader:compileDebugKotlin'.

Launching lib/main.dart on SM G8870 in debug mode...
e: /home/xbl/software/flutter/.pub-cache/hosted/pub.flutter-io.cn/image_downloader-0.18.1/android/src/main/kotlin/com/ko2ic/imagedownloader/ImageDownloaderPlugin.kt: (355, 41): Unresolved reference: random

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':image_downloader: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 2s
Gradle task assembleDebug failed with exit code 1

Can't compile, Kotlin error

Hi. When trying to run the app both on Android Simulator or a physical Android device, I get the following error that won't let the build finish:

e: /Users/carlosvergel/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/image_downloader-0.19.1/android/src/main/kotlin/com/ko2ic/imagedownloader/ImageDownloaderPlugin.kt: (354, 41): Unresolved reference: random

FAILURE: Build failed with an exception.

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

I am running on AndroidX, and I have many other packages that require AndroidX and run well. Both my android simulator and physical device run Android 9.

I read that invalidating and restarting the caches in Android Studio might help. Did it. No use.

Package works great for iOS.

Ios can't download image because of security policy

Ios emulater, when starting download, get these error:

Unsupported value: Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSUnderlyingError=0x600001028780 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}, NSErrorFailingURLStringKey=http://pic.cdn.5nuthost.com/imgflip/289098e09642b1b463c3acee77a503db.jpg, NSErrorFailingURLKey=http://pic.cdn.5nuthost.com/imgflip/289098e09642b1b463c3acee77a503db.jpg, NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.} of type NSURLError

solution:
edit the Info.plist, add these:

  <key>NSAppTransportSecurity</key>  
  <dict>  
    <key>NSAllowsArbitraryLoads</key>
    <true/>  
  </dict>

Download image from a non-secured (HTTP) results in PlatformException - 400

I've noticed that when I try to download an image from a non-secured connection, I get a PlatformException (400), no matter if the domain/url exists or not.

In production, I'll have a secured connection in my backend, but in development, I use my localhost as the backend, and it's not https.

Any solutions?

firebase_core/firebase_auth packages prevents IOS app build

I've found that when I import firebase_core/firebase_auth this prevents the example code from running:

Launching lib/main.dart on iPhone Xʀ in debug mode... Xcode build done. 33.2s Configuring the default Firebase app... *** First throw call stack: ( 0 CoreFoundation 0x0000000104b926fb __exceptionPreprocess + 331 1 libobjc.A.dylib 0x0000000104136ac5 objc_exception_throw + 48 2 CoreFoundation 0x0000000104b92555 +[NSException raise:format:] + 197 3 Runner 0x00000001010b8e92 +[FIRApp configure] + 562 4 Runner 0x0000000101172bd6 -[FLTFirebaseAuthPlugin init] + 214 5 Runner 0x0000000101172988 +[FLTFirebaseAuthPlugin registerWithRegistrar:] + 184 6 Runner 0x0000000101060370 +[GeneratedPluginRegistrant registerWithRegistry:] + 112 7 Runner <…>

This is the error from my own project Launching lib/main.dart on iPhone Xʀ in debug mode... Xcode build done. 1.5s Failed to build iOS app Error output from Xcode build: ↳ ** BUILD FAILED ** Xcode's output: ↳ === BUILD TARGET firebase_auth OF PROJECT Pods WITH CONFIGURATION Debug === /Users/papaanthony/flutter/.pub-cache/hosted/pub.dartlang.org/image_downloader-0.16.0/ios/Classes/ImageDownloaderPlugin.m:2:10: fatal error: 'image_downloader/image_downloader-Swift.h' file not found #import <image_downloader/image_downloader-Swift.h> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. Could not build the application for the simulator. Error launching application on iPhone Xʀ.

Google photos shows image without preview

In google photos when I press my save image button I get 2 photos. One is just a normal photo with preview, correct size, etc. and the other one is just a grey square, meaning it can't load it or it's empty, I don't really know. The grey one has the same size on disk (143kb for example), but google photos says it's less than 50x50.
Other gallery apps don't have this issue. Also a couple of my friends don't get it on google photos either.
I have this issue on my emulator and on my personal phone.
I get this message in the run window and after this I get 3 exact same ones, but they have localUri and mediaType etc. I assumed this one must be the bad file, but it's weird if other people don't face this issue.

D/image_downloader( 9520): RequestResult(id=52, remoteUri=https://images.unsplash.com/photo-1558945657-484aa38065ec?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=933&q=80, localUri=null, mediaType=null, totalSize=-1, title=, description=)

Support for downloading and successfully saving HEIC images.

Hello,

Thanks for the library it helped a lot. Can you support saving HEIC images on iOS? Currently it's throwing unsupported_file exception.

Here is how you identify the file is of HEIC format.

var values: UInt8 = 0
data.copyBytes(to: &values, count: 1)

switch values {

case 0x49, 0x4D:
     // image/tiff
case 0x00:
     if (data.count >= 12) {
        //....ftypheic ....ftypheix ....ftyphevc ....ftyphevx
        let testString =  String(data: data.subdata(in: 4..<12), encoding: .nonLossyASCII)
        if (testString == "ftypheic"
               || testString == "ftypheix"
               || testString == "ftyphevc"
               || testString == "ftyphevx") {
                    // image/heic
                    // TODO: Implement saving HEIC properly
          }
}

I tried to implement it myself but with no success. Would very much appreciate it if you find a way to save HEIC as is.

Thank you!

'NSMutableData' has no member 'count'

I think there is n error in SwiftImageDownloaderPlugin.swift
At line 343 Instead of fileData.count it must be used fileData.length to avoid NSMutableData error.

Error receiving broadcast Intent

Hello, I am facing now with issue and I ran Nexus 5X Android P(emulator),please suggest me
thanks.

I faced this error for the first time permission and terminated the app but second is ok and image is downloaded.

E/AndroidRuntime( 6849): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg='applicationId' (has extras) } in com.ko2ic.imagedownloader.Downloader$execute$1@6d1cd51
E/AndroidRuntime( 6849): at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1341)
E/AndroidRuntime( 6849): at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
E/AndroidRuntime( 6849): at android.os.Handler.handleCallback(Handler.java:873)
E/AndroidRuntime( 6849): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 6849): at android.os.Looper.loop(Looper.java:164)
E/AndroidRuntime( 6849): at android.app.ActivityThread.main(ActivityThread.java:6649)
E/AndroidRuntime( 6849): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 6849): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/AndroidRuntime( 6849): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)
E/AndroidRuntime( 6849): Caused by: java.io.FileNotFoundException: /storage/emulated/0/Download/2019-04-01.21.32.000 (Permission denied)
E/AndroidRuntime( 6849): at java.io.FileInputStream.open0(Native Method)
E/AndroidRuntime( 6849): at java.io.FileInputStream.open(FileInputStream.java:231)
E/AndroidRuntime( 6849): at java.io.FileInputStream.(FileInputStream.java:165)
E/AndroidRuntime( 6849): at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl$granted$3.invoke(ImageDownloaderPlugin.kt:199)
E/AndroidRuntime( 6849): at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl$granted$3.invoke(ImageDownloaderPlugin.kt:152)
E/AndroidRuntime( 6849): at com.ko2ic.imagedownloader.Downloader.resolveDownloadStatus(Downloader.kt:98)
E/AndroidRuntime( 6849): at com.ko2ic.imagedownloader.Downloader.access$resolveDownloadStatus(Downloader.kt:12)
E/AndroidRuntime( 6849): at com.ko2ic.imagedownloader.Downloader$execute$1.onReceive(Downloader.kt:31)
E/AndroidRuntime( 6849): at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1331)
E/AndroidRuntime( 6849): ... 8 more
I/Process ( 6849): Sending signal. PID: 6849 SIG: 9

Execution failed for task ':app:processDebugResources'.

Hey I am using image_downloader: 0.11.1, Also I am not using Android X, because my other plugins are not working with that.

but I am getting this error while running flutter run

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processDebugResources'.
> Android resource linking failed
  Output:  /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml:188: error: resource android:attr/fontVariationSettings not found.
  /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml:188: error: resource android:attr/ttcIndex not found.
  error: failed linking references.

  Command: /Users/apple/.gradle/caches/transforms-1/files-1.1/aapt2-3.2.1-4818971-osx.jar/634110a8b379185f0ac3a02fb852a873/aapt2-3.2.1-4818971-osx/aapt2 link -I\
          /Users/apple/Library/Android/sdk/platforms/android-27/android.jar\
          --manifest\
          /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/merged_manifests/debug/processDebugManifest/merged/AndroidManifest.xml\
          -o\
          /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_\
          -R\
          @/Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/incremental/processDebugResources/resources-list-for-resources-debug.ap_.txt\
          --auto-add-overlay\
          --java\
          /Users/apple/Desktop/tripmate/tripmate/build/app/generated/not_namespaced_r_class_sources/debug/processDebugResources/r\
          --proguard-main-dex\
          /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/legacy_multidex_aapt_derived_proguard_rules/debug/processDebugResources/manifest_keep.txt\
          --custom-package\
          com.example.tripmate\
          -0\
          apk\
          --output-text-symbols\
          /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/symbols/debug/R.txt\
          --no-version-vectors
  Daemon:  AAPT2 aapt2-3.2.1-4818971-osx Daemon #0
  Output:  /Users/apple/.gradle/caches/transforms-1/files-1.1/core-1.0.1.aar/0028747adfc894c91df75640f30b3d41/res/values/values.xml:89:5-125:25: AAPT: error: resource android:attr/fontVariationSettings not found.

  /Users/apple/.gradle/caches/transforms-1/files-1.1/core-1.0.1.aar/0028747adfc894c91df75640f30b3d41/res/values/values.xml:89:5-125:25: AAPT: error: resource android:attr/ttcIndex not found.

  error: failed linking references.
  Command: /Users/apple/.gradle/caches/transforms-1/files-1.1/aapt2-3.2.1-4818971-osx.jar/634110a8b379185f0ac3a02fb852a873/aapt2-3.2.1-4818971-osx/aapt2 link -I\
          /Users/apple/Library/Android/sdk/platforms/android-27/android.jar\
          --manifest\
          /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/merged_manifests/debug/processDebugManifest/merged/AndroidManifest.xml\
          -o\
          /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_\
          -R\
          @/Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/incremental/processDebugResources/resources-list-for-resources-debug.ap_.txt\
          --auto-add-overlay\
          --java\
          /Users/apple/Desktop/tripmate/tripmate/build/app/generated/not_namespaced_r_class_sources/debug/processDebugResources/r\
          --proguard-main-dex\
          /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/legacy_multidex_aapt_derived_proguard_rules/debug/processDebugResources/manifest_keep.txt\
          --custom-package\
          com.example.tripmate\
          -0\
          apk\
          --output-text-symbols\
          /Users/apple/Desktop/tripmate/tripmate/build/app/intermediates/symbols/debug/R.txt\
          --no-version-vectors
  Daemon:  AAPT2 aapt2-3.2.1-4818971-osx Daemon #0

* 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 42s
 
Gradle task 'assembleDebug'... Done                         43.4s
Gradle task assembleDebug failed with exit code 1

Can anyone help me with this?

Issues with AndroidX

I'm having issues migrating an app to AndroidX, that uses this package. This is the output:

Execution failed for task ':app:preReleaseBuild'.
> Android dependency 'androidx.core:core' has different version for the compile (1.0.0-rc01) and runtime (1.0.1) classpath. You should manually set the same version via DependencyResolution

Is this package migrated to AndroidX?
Thanks :)

The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.

`D8: Program type already present: android.support.v4.os.ResultReceiver$MyResultReceiver

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\52.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\60.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\69.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\70.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\54.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\67.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\42.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\72.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\48.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\74.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\57.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\63.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\43.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\61.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\55.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\73.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\49.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\58.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\39.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\40.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\66.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\75.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\64.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\14.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\13.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\7.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\19.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\3.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\10.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\18.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\8.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\4.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\11.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\9.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\5.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\17.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\15.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\20.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\2.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\12.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\6.jar, D:\flutter_projects\zdx_zqt\build\app\intermediates\transforms\dexBuilder\debug\16.jar
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: android.support.v4.os.ResultReceiver$MyResultReceiver

  • 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 1m 8s
Finished with error: Gradle task assembleDebug failed with exit code 1


The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
See https://goo.gl/CP92wY for more information on the problem and how to fix it.


`

image
`def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
compileSdkVersion 28

lintOptions {
    disable 'InvalidPackage'
}

defaultConfig {
    // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
    applicationId "com.yinet.***"
    minSdkVersion 16
    targetSdkVersion 28
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    ndk {
        abiFilters 'x86', 'armeabi-v7a'//, 'x86_64', 'mips', 'mips64', 'arm64-v8a','armeabi'
    }
    manifestPlaceholders = [
            JPUSH_PKGNAME: applicationId,
            JPUSH_APPKEY : "********", // NOTE: JPush 上注册的包名对应的 Appkey.
            JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
    ]
}


signingConfigs {
    release {
        keyAlias 'yinet'
        keyPassword 'zd123456'
        storeFile file('key/zhengding.jks')
        storePassword 'zd123456'
    }
}

buildTypes {
    release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.release
    }
}

}

flutter {
source '../..'
}

dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
`
image

Run time error (Android)

C:\Users\user.gradle\caches\transforms-1\files-1.1\core-1.0.1.aar\5fa504017df0cb8b948001bd21bf1b1c\res\values\values.xml:133:5-70: AAPT: error: resource android:attr/fontVariationSettings not found.

C:\Users\user.gradle\caches\transforms-1\files-1.1\core-1.0.1.aar\5fa504017df0cb8b948001bd21bf1b1c\res\values\values.xml:133:5-70: AAPT: error: resource android:attr/ttcIndex not found.

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:processDebugResources'.

Failed to process resources, see aapt output above for 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 23s
    Gradle task assembleDebug failed with exit code 1

pls check.

Error while compiling (Android)

When I try to run or compile the app, an error gets throw. Only on Android, on iOS works with. Ran flutter clean and didn't improve anything. Here's the error:

* Error running Gradle:
ProcessException: Process "/home/jesus/Documents/space-curiosity/android/gradlew" exited
abnormally:
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)


FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':image_downloader'.
> Failed to notify project evaluation listener.
   > java.lang.AbstractMethodError (no error message)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get
more log output.

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

BUILD FAILED in 0s
  Command: /home/jesus/Documents/space-curiosity/android/gradlew app:properties


Please review your Gradle project setup in the android/ folder.

Thank you.

Failed to build iOS app

We are unable to build the iOS app. It works on Android.

Here is the error.

Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **


Xcode's output:
↳
    === BUILD TARGET shared_preferences OF PROJECT Pods WITH CONFIGURATION Debug ===
    /Users/user1/development/flutter/.pub-cache/hosted/pub.dartlang.org/image_downloader-0.11.2/ios/Classes/ImageDownloaderPlugin.m:2:9: fatal error: 'image_downloader/image_downloader-Swift.h' file not found
    #import <image_downloader/image_downloader-Swift.h>
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.

Could not build the application for the simulator.
Error launching application on iPhone XR.

We tried to build it on both the simulator and real device, getting the same error. This happened last week and we saw this issue, so we didn't bother to raise another issue.

Today we downloaded the latest built from Mar. 11, still having the same issue.

We tried deleting Podfile.lock before building and didn't work.

Overwrite existing image

I'm storing images to a custom directory, using a custom filename. However, when I save the same file a second time it gets renamed to something else instead of overwriting it (e.g file.jpg will become file-1.jpg).

Maybe add a bool overwite parameter to AndroidDestinationType.custom() to customize this behavior?

App crashes for large file

My Android app crashes when I download large file.
I have 2 videos: one of 16.6 MB and one of 18.3 MB
Systematically when I try to download the larger the app crashes.
No problems for the other video.
The only way to solve the problem is setting inExternalFilesDir().
These are the logs:

/AndroidRuntime( 5865): Process: it.injenia.tools.interacta.mobile.dev, PID: 5865
E/AndroidRuntime( 5865): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=it.injenia.tools.interacta.mobile.dev (has extras) } in com.ko2ic.imagedownloader.Downloader$execute$1@66896a7
E/AndroidRuntime( 5865): 	at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1533)
E/AndroidRuntime( 5865): 	at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
E/AndroidRuntime( 5865): 	at android.os.Handler.handleCallback(Handler.java:891)
E/AndroidRuntime( 5865): 	at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 5865): 	at android.os.Looper.loop(Looper.java:207)
E/AndroidRuntime( 5865): 	at android.app.ActivityThread.main(ActivityThread.java:7539)
E/AndroidRuntime( 5865): 	at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 5865): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
E/AndroidRuntime( 5865): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
E/AndroidRuntime( 5865): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
E/AndroidRuntime( 5865): 	at android.database.AbstractCursor.checkPosition(AbstractCursor.java:468)
E/AndroidRuntime( 5865): 	at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
E/AndroidRuntime( 5865): 	at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
E/AndroidRuntime( 5865): 	at android.database.CursorWrapper.getString(CursorWrapper.java:137)
E/AndroidRuntime( 5865): 	at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl.saveToDatabase(ImageDownloaderPlugin.kt:320)
E/AndroidRuntime( 5865): 	at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl.access$saveToDatabase(ImageDownloaderPlugin.kt:194)
E/AndroidRuntime( 5865): 	at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl$granted$3.invoke(ImageDownloaderPlugin.kt:274)
E/AndroidRuntime( 5865): 	at com.ko2ic.imagedownloader.ImageDownloaderPlugin$CallbackImpl$granted$3.invoke(ImageDownloaderPlugin.kt:194)
E/AndroidRuntime( 5865): 	at com.ko2ic.imagedownloader.Downloader.resolveDownloadStatus(Downloader.kt:165)
E/AndroidRuntime( 5865): 	at com.ko2ic.imagedownloader.Downloader.access$resolveDownloadStatus(Downloader.kt:12)
E/AndroidRuntime( 5865): 	at com.ko2ic.imagedownloader.Downloader$execute$1.onReceive(Downloader.kt:31)
E/AndroidRuntime( 5865): 	at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1520)
E/AndroidRuntime( 5865): 	... 8 more

How to get rid of download notification

When I download image using this plugin, a download notification (in status bar & notification area) appears, after the download completes, the name of this notification is like a date (not the downloaded file name) and when press this notification to open it, it opens nothing (like file not exist)
my questions:

  1. if I can make this notification works (so it will open the downloaded file when pressed), please show me how.
  2. if I can't make it works, how can I remove it??

tested on Android 6 phone.

ios flush close

i use my demo and example imagedownlod in iphone6+ ios Flash back

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.