Flutter plugin for selecting images/videos from the Android and iOS image library, and taking pictures/videos with the camera,save image/video to album/gallery
ios(10+): ZLPhotoBrowser
android(21+): PictureSelector
- pick multiple images/videos from photo album (wechat style)
- use camera to take image/video
- crop images with custom aspectRatio
- compress images with quality/maxSize
- save image/video to album/gallery
- localizations currently support
- System, Chinese, ChineseTraditional, English, Japanese, French, Korean, German, Vietnamese,
For ios:
<key>NSCameraUsageDescription</key> <string>Example usage description</string> <key>NSMicrophoneUsageDescription</key> <string>Example usage description</string> <key>NSPhotoLibraryUsageDescription</key> <string>Example usage description</string> For android:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> Goto android/app/build.gradle minSdkVersion 21 And,
images_picker: ^newestimport "package:images_picker/images_picker.dart";- simple picker image
Future getImage() async { List<Media> res = await ImagesPicker.pick( count: 3, pickType: PickType.image, ); // Media // .path // .thumbPath (path for video thumb) // .size (kb) }- simple picker video
Future getImage() async { List<Media> res = await ImagesPicker.pick( count: 3, pickType: PickType.video, ); // Media // .path // .thumbPath (path for video thumb) // .size (kb) }- simple open camera
ImagesPicker.openCamera( pickType: PickType.video, maxTime: 15, // record video max time );- add gif support
ImagesPicker.pick( // ... gif: true, // default is true );- add max video duration pick
ImagesPicker.pick( // ... maxTime: 30, // second );- add cropper (gif crop unsupported)
ImagesPicker.pick( // ... // when cropOpt isn't null, crop is enabled cropOpt: CropOption( aspectRatio: CropAspectRatio.custom, cropType: CropType.rect, // currently for android ), );- add compress
ImagesPicker.pick( // ... // when maxSize/quality isn't null, compress is enabled quality: 0.8, // only for android maxSize: 500, // only for ios (kb) );- set language
ImagesPicker.pick( language: Language.English, // you can set Language.System for following phone language )- save file to album
ImagesPicker.saveImageToAlbum(file, albumName: ""); ImagesPicker.saveVideoToAlbum(file, albumName: "");- save network file to album
because the HTTP request is uncontrollable in plugin(such as progress),you must download file ahead of time
void save() async { File file = await downloadFile('https://xxx.example.com/xx.png'); bool res = await ImagesPicker.saveImageToAlbum(file, albumName: ""); print(res); } Future<File> downloadFile(String url) async { Dio simple = Dio(); String savePath = Directory.systemTemp.path + '/' + url.split('/').last; await simple.download(url, savePath, options: Options(responseType: ResponseType.bytes)); print(savePath); File file = new File(savePath); return file; }// for pick int count = 1, PickType pickType = PickType.image, bool gif = true, int maxTime = 120, CropOption cropOpt, int maxSize, double quality, // for camera PickType pickType = PickType.image, int maxTime = 15, CropOption cropOpt, int maxSize, double quality,-keep class com.luck.picture.lib.** { *; } -dontwarn com.yalantis.ucrop** -keep class com.yalantis.ucrop** { *; } -keep interface com.yalantis.ucrop** { *; } MIT License