image_picker_plus 2.0.0
image_picker_plus: ^2.0.0 copied to clipboard
Image and video picker with gallery, camera, crop, filters, themes and optional caching, on mobile, web and desktop. No native code of its own.
2.0.0 #
Breaking #
PickerSettings.filtersis a list now.filters: trueisfilters: PickerFilter.all, and[](the default) hides the strip- an edited image with no
maxWidthormaxHeightis written at up to 2048 pixels on its long side, it was 4096. an export holds about 8 bytes for every pixel it writes, so the old cap was about 100 mb for one photo and this is a quarter of those pixels. passmaxWidthto ask for more
Editing #
- custom filters with
PickerFilter(name, matrix), after a "Normal" that's always first - a strength slider for the picked filter, full by default
- new
PickerSettings.adjustments: brightness, contrast, saturation and warmth sliders on top of the filter, with a switch when filters are on too - rotate left and flip in the crop, kept per image, with the markup following
- new
PickerSettings.rotateandPickerSettings.flipto hide either button, both on by default - adding more from the edit page keeps at least one item selected in the gallery
- the camera is let go while the edit page is open
- in a window too small for it, the edit page says to make the window bigger instead of overflowing
Markup #
- markup on the edit screen: text with emoji and right to left, freehand drawing with undo, redo and an eraser, and the popular emojis, each one on by itself. drawn into the saved image at full size
- new
PickerSettings.markupwithMarkupOptions, all off by default.editingis now true when a markup tool is on - a text or emoji dragged to the delete area stays visible past the image's edges
Camera #
- pinch zoom and quick zoom buttons (0.5x where the phone has it, 1x, 2x and the max, up to 10x), a 3 and 10 second timer, and a rule of thirds grid
- new
PickerSettings.camerawithCameraOptions: turn each of them off, start with the grid on, or draw an overlay over the preview - the capture button turns red while recording, new
PickerTheme.recordingto change it
Picking #
- new
selectedonpick: an earlier result opens selected, in the same order and with its crops and filters. with editing on it opens the edit page, the gallery only from its plus. on web and desktop it skips the system picker PickedItemhasid,original,editandoverLimit, andtoMap()/PickedItem.fromMap()to keep a pick between launchesEditStateis public. it hasturns,flipped,adjustments,filterStrengthand the markup, in its map too. maps saved before load with none of them, at full strength- a tap on a gallery cell scrolls its row right under the preview
Export #
- new
OutputOptions.format: JPEG or PNG. PNG keeps transparency, a JPEG now gets white where it was see through instead of black - new
OutputOptions.maxBytes, the quality goes down to 50 first, then the size. what still can't fit comes back withoverLimit: true maxWidthandmaxHeightnow apply to unedited images too, an image over them comes back scaled with its original attached- saving an edited image is lighter on memory, it is drawn and encoded in small strips one at a time, so a 2 gb phone can export a big photo.
imageis no longer a dependency - a photo is decoded at 16 mp at most while exporting, a tight crop of a 50 mp one used to decode all 200 mb of it. a crop that wants more than the cap comes back at the size the cap gives, not upscaled to it
- the thumbnails and previews the picker cached are given back when an export starts, they can be a hundred mb and the export needs it more
Texts #
- English and Arabic built in:
PickerTexts.of(context)follows the app's language,ArabicTexts()picks Arabic. Still English by default - Chinese (simplified), Japanese, Hindi, Spanish, German, Turkish and Russian built in too:
ChineseTexts(),JapaneseTexts(),HindiTexts(),SpanishTexts(),GermanTexts(),TurkishTexts()andRussianTexts(), andPickerTexts.of(context)picks them by the app's language - new texts
rotate,flip,filters,adjust,brightness,contrast,saturation,warmth,reset,strengthandminAdd - new texts
timer,timerOff,timerSeconds,gridandzoomLevel - new texts
text,draw,emojis,undo,redo,eraser,delete,font,textBackground,color,sizeanddoneEditing - new text
windowTooSmall
Docs #
- every exported class and setting is documented, topics and screenshots for pub.dev
1.1.0 #
- Improve export performance by 80%
- new
PickerSettings.useRootNavigator, false by default, so the picker opens on the nearest navigator and a tab bar or nested shell stays visible over it - with
showPreview: falsethe select button row is gone, a long press on a cell starts the selection
1.0.1 #
- pub.dev lists macOS, Windows and Linux too, the pubspec declares the platforms now
- wasm ready:
video_playeris out of the web build, so a video on web shows a placeholder like on Windows and Linux. it says the preview isn't available there and the video is still exported, the text isPickerTexts.videoPreviewNotSupported cross_fileis no longer a direct dependency,XFilecomes fromfile_selector. the same class, nothing to change
1.0.0 #
- new API:
ImagePickerPlus.pick(context, settings: PickerSettings(...))returnsList<PickedItem>?(breaking, see "Migrating from 0.6.0" in the README) - no native code anymore, the copied image_crop plugin is removed
- own crop and filters, the result matches the preview and is saved as JPEG with no metadata
- saving the edits runs in a background isolate (decode, crop, filters and encode), with a small processing popup. on web it stays on the engine
- crop in the preview, then filters, reorder and crop again on the edit screen, for many images at once. going back keeps the edits
- camera photos can be cropped too
- the preview slides up under the app bar while scrolling the grid, drag it down or scroll to the top to bring it back. it can be hidden with
showPreview: false - the preview and edit images are decoded at the size they're shown,
resizePreview: falsekeeps them at 1080 pixels - ratio menu under the crop button,
CropRatio.allby default.cropRatios: []turns the crop off - grid columns and cell shape can be set
- camera tabs for photo and video, front/rear, flash, and clear messages when there's no camera or access
- light and dark themes, custom colors and texts, RTL, reduced motion, layouts for phones and tablets
- optional disk cache with a size limit, and
ImagePickerPlus.clearCache() - faster gallery: the first 20 show right away and the rest loads 20 at a time behind them, with smaller thumbnails
- fewer dependencies (shimmer and image_picker removed)
- CI for every PR and releases from a version tag
- web, macOS, Windows and Linux: the system file picker opens, then the edit screen with crop, filters and reorder. no gallery or camera there
- the edit screen is a card on wide windows, with mouse wheel and trackpad zoom, drag to reorder, hover, and Esc / Enter / Tab
- a tap picks one image. a long press (with a vibration) or the select button starts counting up to
maxSelection, cancel goes back to the shown image - switching album goes back to the top, shows the preview fully with the album's first image
- a plus after the images on the edit screen goes back to pick more (the system picker on web and desktop). they're added last, never past
maxSelection, and the plus hides at the max - the plus also adds a photo or video from the camera tabs, and shows with one item too, also after a camera photo
- tap the camera preview to focus and set the exposure there
- a paused video shows a play icon. on the edit screen videos start paused with sound, and a tap plays or pauses
- albums are sorted by the date taken, newest first, and images with no size saved show up too
- a scrollbar with the month and year shows while scrolling the grid, drag it to jump
- the picker is dark by default,
alwaysDarkTheme: falsefollows the app brightness - new texts
maxKept,filesSkipped,select,cancel,addandmonths, andPickerTheme.barrier
0.6.0 #
- update dependencies (camera 0.12, shimmer 4, video_player 2.14, photo_manager 3.12, image 4.10, image_picker 1.2.3)
- minimum flutter 3.44 / dart 3.12
- minimum android sdk 24, ios 13
- gallery now works with limited photo access
- update permissions in README (microphone, android 14 selected photos, READ_EXTERNAL_STORAGE for android 12 and below)
- show a message with close button when there is no camera, instead of loading forever
- add close button when there is no images
- fix blank preview sometimes when opening the gallery
- fix preview going back to the first image when more images load
0.5.10+1 #
- handle limit access for ios
0.5.10 #
- update package code
0.5.9 #
- solve camera button bug
0.5.8 #
- solve photo permission bug #56, #68
- solve crop image bugs
0.5.7 #
- solve #63 issue "dependencies bugs"
0.5.6+2 #
- update flutter version
0.5.6+1 #
- handle camera preview
0.5.6 #
- reformat the code
- return callbackFunction
0.5.5+3 #
- add maximumSelection as a parameter
0.5.5+2 #
- update dependencies
0.5.5+1 #
- solve tab bar bug
0.5.5 #
- refactoring the code
0.5.4 #
- edit video display
- add CI/CD
0.5.3 #
- edit video display
0.5.2 #
- update README
- create custom route
0.5.1 #
- update README
- create sendRequestFunction
0.5.0 #
- handle multi selection images bugs
0.4.0 #
- change the way of pick images
0.3.9 #
- update the dependencies
- update README.md
0.3.8 #
- handle crop keys
0.3.7 #
- solve drop frames bug when page view is moving
0.3.6 #
- fix permission bug
- add INTERNET permission in manifest.xml
- update README.md
0.3.5 #
- solve warning of uses or overrides a deprecated API.
0.3.4 #
- solve dropped frames issue in grid view when scrolling
- solve the issue in grid view when the tap bar is moved
- remove the unuseful package
0.3.3+1 #
- reformat the code
0.3.3 #
- rename tabs texts
0.3.2 #
- solve box constraints bug
0.3.1 #
- restructure gallery display
- handling video lag
0.2.8 #
- change the paint color to white
0.2.7 #
- Solve permissions bugs
- Solve camera initializes bugs
- Edit README
0.2.6 #
- Edit README
0.2.5 #
- Ignores deprecation warnings
0.2.4 #
- Solve front camera bugs
- Add some different cases as in example
0.2.3 #
- Solve camera package bugs
- Write a documentation
0.2.2 #
- Add an example to the package
0.2.1 #
- make camera self initialize
0.2.0 #
- Add a normal display
- Solve multi-selection mode bugs
