{"id":21468984,"url":"https://github.com/weta-vn/advance_image_picker","last_synced_at":"2026-01-11T13:32:47.485Z","repository":{"id":38855485,"uuid":"373115166","full_name":"weta-vn/advance_image_picker","owner":"weta-vn","description":"Flutter plugin for selecting multiple images from the Android and iOS image library, taking new pictures with the camera, and edit them before using such as rotating, cropping, adding sticker/filters.","archived":false,"fork":false,"pushed_at":"2022-10-15T16:04:24.000Z","size":9935,"stargazers_count":113,"open_issues_count":18,"forks_count":53,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-08-20T06:47:16.505Z","etag":null,"topics":["android","flutter","flutter-camera","flutter-image-picker","flutter-images-picker","flutter-multiple-images-picker","flutter-package","flutter-picker","image","image-picker","ios"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weta-vn.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":null,"patreon":"wetavn","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-06-02T09:48:13.000Z","updated_at":"2025-08-14T20:21:16.000Z","dependencies_parsed_at":"2022-08-09T06:16:32.409Z","dependency_job_id":null,"html_url":"https://github.com/weta-vn/advance_image_picker","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/weta-vn/advance_image_picker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weta-vn%2Fadvance_image_picker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weta-vn%2Fadvance_image_picker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weta-vn%2Fadvance_image_picker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weta-vn%2Fadvance_image_picker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weta-vn","download_url":"https://codeload.github.com/weta-vn/advance_image_picker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weta-vn%2Fadvance_image_picker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001933,"owners_count":26083226,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","flutter","flutter-camera","flutter-image-picker","flutter-images-picker","flutter-multiple-images-picker","flutter-package","flutter-picker","image","image-picker","ios"],"created_at":"2024-11-23T09:12:14.552Z","updated_at":"2025-10-09T18:34:04.453Z","avatar_url":"https://github.com/weta-vn.png","language":"Dart","funding_links":["https://patreon.com/wetavn","https://www.buymeacoffee.com/wetavn"],"categories":[],"sub_categories":[],"readme":"# advance_image_picker\n\nFlutter plugin for selecting **multiple images** from the Android and iOS image library, **taking new pictures with the camera**, and **edit** them before using such as rotating, cropping, adding sticker/filters.\n\n*This is an advanced version of [image_picker](https://pub.dev/packages/image_picker) plugin.*\n\n\n## Key Features\n\n- Display live camera preview in a widget\n- Adjust exposure\n- Zoom camera preview\n- Capture photo without saving into device library\n- Capture with preview size mode \u0026 full screen size mode\n- Select photos from device library by browsing photo albums\n- Preview selected images\n- Support button label \u0026 text translation\n- Easy image editing features, such as rotation, cropping, adding sticker/filters\n- Allow user add external image editors for editing selected images.\n- Support for displaying object detection \u0026 OCR result on selected image view\n- Allow setting user's own stickers\n\n## Apps using this package\n\n**1. freemar.vn - Shopping app for Vietnamese**\n\n\u003ca href=\"https://play.google.com/store/apps/details?id=com.freemar.vn\" class=\"download-btn\"\u003e\u003ci class=\"bx bxl-play-store\"\u003e\u003c/i\u003e Google Play\u003c/a\u003e\n\u003ca href=\"https://apps.apple.com/vn/app/freemar/id1530667938?l=vi\" class=\"download-btn\"\u003e\u003ci class=\"bx bxl-apple\"\u003e\u003c/i\u003e App Store\u003c/a\u003e\n\n**2. trainghiem.vn - Find places to have fun, find places to experience!**\n\n\u003ca target=\"_blank\" data-animation=\"fadeInRight\" data-delay=\"1.0s\" href=\"https://play.google.com/store/apps/details?id=com.trainghiem.vn\" class=\"btn\" tabindex=\"0\" style=\"animation-delay: 1s;\"\u003eGoogle Play\u003c/a\u003e\n\u003ca target=\"_blank\" data-animation=\"fadeInLeft\" data-delay=\"1.0s\" href=\"https://apps.apple.com/vn/app/trainghiemvn/id1537519143?l=vi\" class=\"btn\" tabindex=\"0\" style=\"animation-delay: 1s;\"\u003eApp Store\u003c/a\u003e\n\n**3. Henoo - Heritage in your pocket (Le patrimoine dans la poche)**\n\n\u003ca href=\"https://play.google.com/apps/testing/fr.henoo.henooapp\" class=\"download-btn\"\u003e\u003ci class=\"bx bxl-play-store\"\u003e\u003c/i\u003e Google Play\u003c/a\u003e\n\u003ca href=\"https://apps.apple.com/fr/app/henoo/id1550979414\" class=\"download-btn\"\u003e\u003ci class=\"bx bxl-apple\"\u003e\u003c/i\u003e App Store\u003c/a\u003e\n\n## Demo \u0026 Screenshots\n\n\u003cimg src=\"https://raw.githubusercontent.com/weta-vn/freemar_image_picker/master/screenshot/1.png\" width=\"100%\"/\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/weta-vn/freemar_image_picker/master/screenshot/2.png\" width=\"100%\"/\u003e\n\n ---\n[*Youtube Demo Link*](https://youtu.be/pl0S72kd0mo)\n\n\n## Installation\n\n### Dart\nThis plugin requires dart version 2.16.1 or later\n\n### iOS\n\nAdd these settings to the ios/Runner/Info.plist\n\n~~~~\n\u003ckey\u003eNSCameraUsageDescription\u003c/key\u003e\n\u003cstring\u003eCan I use the camera please?\u003c/string\u003e\n\u003ckey\u003eNSMicrophoneUsageDescription\u003c/key\u003e\n\u003cstring\u003eCan I use the mic please?\u003c/string\u003e\n\u003ckey\u003eNSPhotoLibraryUsageDescription\u003c/key\u003e\n\u003cstring\u003eApp need your agree, can visit your album\u003c/string\u003e\n~~~~\n\nModify TOCropViewController version in snapshot (ios/Podfile.lock) to 2.6.1\n~~~~\nTOCropViewController (2.6.1)\n~~~~\n\n\n### Android\n\nChange the minimum Android sdk version to 21 (or higher), and compile sdk to 31 (or higher) in your `android/app/build.gradle` file (refer example project).\n\n~~~~\ncompileSdkVersion 31\nminSdkVersion 21\n~~~~\n\nChange kotlin version to 1.5.21 or later in your `android/build.gradle` file (refer example project).\n~~~~\next.kotlin_version = '1.5.21'\n~~~~\n\nAdd activity and uses-permissions to your `AndroidManifest.xml`, just like next.\n\n```\n\u003cmanifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"vn.weta.freemarimagepickerexample\"\u003e\n\n    \u003capplication\n        android:name=\"io.flutter.app.FlutterApplication\"\n        android:label=\"freemarimagepicker_example\"\n        android:requestLegacyExternalStorage=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\u003e\n        \u003cactivity\n            android:name=\"com.yalantis.ucrop.UCropActivity\"\n            android:screenOrientation=\"portrait\"\n            android:theme=\"@style/Theme.AppCompat.Light.NoActionBar\"/\u003e\n    \u003c/application\u003e\n    \u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.CAMERA\" /\u003e\n\u003c/manifest\u003e\n```\n\n## Usages\n\nAdd to pubspec\n\n```\ndependencies:\n  advance_image_picker: $latest_version\n```\n\nImport dart code\n\n```\nimport 'package:advance_image_picker/advance_image_picker.dart';\n```\n\nSetting configs \u0026 text translate function\n\n```\n// Setup image picker configs (global settings for app)\nvar configs = ImagePickerConfigs();\nconfigs.appBarTextColor = Colors.black;\nconfigs.stickerFeatureEnabled = false; // ON/OFF features\nconfigs.translateFunc = (name, value) =\u003e Intl.message(value, name: name); // Use intl function\n\n// Add plugin's string inside lib/l10n/intl_**.arb of your project to use translation\n// For example about english messages, declared inside intl_en.arb\n{\n  \"app_title\": \"FreeMar - Share your things\",\n  \"image_picker_exit_without_selecting\": \"Do you want to exit without selecting images?\",\n  \"image_picker_select_images_title\": \"Selected images count\",\n  \"image_picker_select_images_guide\": \"You can drag images for sorting list...\",\n  \"image_picker_camera_title\": \"Camera\",\n  \"image_picker_album_title\": \"Album\",\n  \"image_picker_preview_title\": \"Preview\",\n  \"image_picker_confirm_delete\": \"Do you want to delete this image?\",\n  \"image_picker_confirm_reset_changes\": \"Do you want to clear all changes for this image?\",\n  \"image_picker_no_images\": \"No images...\",\n  \"image_picker_image_crop_title\": \"Image crop\",\n  \"image_picker_image_filter_title\": \"Image filter\",\n  \"image_picker_image_edit_title\": \"Image edit\",\n  \"image_picker_select_button_title\": \"Select\",\n  \"image_picker_image_sticker_title\": \"Image sticker\",\n  \"image_picker_image_addtext_title\": \"Image add text\",\n  \"image_picker_image_sticker_guide\": \"You can click on below icons to add into image, double click to remove it from image\",\n  \"image_picker_edit_text\": \"Edit text\",\n  \"suitcase\": \"Suitcase\",\n  \"handbag\": \"Handbag\",\n  \"bottle\": \"Bottle\",\n  \"tie\": \"Tie\",\n  ...\n}\n\n// Or you can simply write your own translate function like this\n// configs.translateFunc = (name, value) =\u003e Intl.message(value, name: name);\n   configs.translateFunc = (name, value) {\n     switch (name) {\n       case 'image_picker_select_images_title':\n         return 'Le immagini selezionate contano';\n       case 'image_picker_select_images_guide':\n         return 'È possibile trascinare le immagini per lelenco di ordinamento...';\n       case 'image_picker_camera_title':\n         return 'Telecamera';\n       case 'image_picker_album_title':\n         return 'Album';\n       // ... Declare all your strings here\n       default:\n         return value;\n     }\n   }\n```\n\nSample for adding external image editors.  \n(You can replace ImageEdit widget by your owned image editor widget, that output file after editing finised)\n```\nconfigs.externalImageEditors['external_image_editor_1'] = EditorParams(\n      title: 'external_image_editor_1',\n      icon: Icons.edit_rounded,\n      onEditorEvent: (\n              {required BuildContext context,\n              required File file,\n              required String title,\n              int maxWidth = 1080,\n              int maxHeight = 1920,\n              int compressQuality = 90,\n              ImagePickerConfigs? configs}) async =\u003e await Navigator.of(context).push(MaterialPageRoute\u003cFile\u003e(\n              fullscreenDialog: true,\n              builder: (context) =\u003e ImageEdit(file: file, title: title, maxWidth: maxWidth, maxHeight: maxHeight, configs: configs)))\n  );\n```\n\n\nSample for usage\n\n```\n// Get max 5 images\nList\u003cImageObject\u003e objects =\n    await Navigator.of(context).push(\n        PageRouteBuilder(pageBuilder:\n            (context, animation, __) {\n  return ImagePicker(maxCount: 5);\n}));\n\nif (objects.length \u003e 0) {\n  setState(() {\n    imageFiles.addAll(objects\n        .map((e) =\u003e e.modifiedPath)\n        .toList());\n  });\n}\n```\n\n## Credits\n\nThis software uses the following open source packages:\n\n- camera\n- photo_manager\n- photo_view\n- image\n- image_cropper\n- image_editor\n- flutter_native_image\n- path_provider\n\n## Support\n\nIf this plugin was useful to you, helped you to deliver your app, saved you a lot of time, or you just want to support the project, I would be very grateful if you buy me a cup of coffee.\n\n\u003ca href=\"https://www.buymeacoffee.com/wetavn\" target=\"_blank\" rel=\"ugc\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/purple_img.png\" alt=\"Buy Me A Coffee\"\u003e\u003c/a\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweta-vn%2Fadvance_image_picker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweta-vn%2Fadvance_image_picker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweta-vn%2Fadvance_image_picker/lists"}