To know more about breaking changes, see the Migration Guide.
None.
- Optimize task priority handling on Darwin by automatically assigning QoS levels based on method types.
- Optimize the default sort descriptors on Darwin.
- Fix the incorrect type of conversion with the Live-Photo's duration on Darwin.
- Fix request permissions for images and videos on Android API 33+.
- Do not throw when querying non-existing assets in bulk on Android.
- Allows to get the duration of a Live Photo with
AssetEntity.durationWithOptions
on iOS and macOS.
- Improves the options when fetching a fixed number of assets on iOS and macOS.
- Do not use
privateFileURL
on iOS 18+. - Fixes saving MP4 videos will result in 3GP on Android API 30-.
- Fixes nullable results returned when saving images and videos on Android.
- Get rid of
@try
@catch
when toggling favorite on Darwin.
- Fix no returned IDs after successful deletion on Android API 29+.
- Fix mediaLocation = true does not work on Android API 34.
- Reuse files when saving images on Darwin.
- Returns non-nullable results as much as possible.
- Fix export session file type with videos for the first time on Darwin.
- Provide
PMDarwinAVFileType
to help convert entities' files on iOS and macOS by making explicit exports.
- Improve cache output path equality on iOS and macOS.
- Get the current resource filename rather than the raw one on iOS and macOS. Also the plugin expands the ability when getting titles.
- Use
PHCachingImageManager
to improve image memory caches on iOS and macOS.
- Fix incorrect download finished prediction during iCloud file downloading.
saveLivePhoto
now requires title
rather than filename
.
- Add
getPermissionState
method toPhotoManager
.
- Adds a detached state for managers. Callers with those managers will first be aware of the detaching state before any actual calls to avoid crashes.
- Errors replied by the channel do not include detailed messages before. Now the code will unwrap certain exceptions to extract details from them.
- Expose
progressHandler
forAssetEntity.getMediaUrl
. - Expose
withSubtype
forAssetEntity.isLocallyAvailable
to request if a Live Photo resource is available.
PHAssetResource
with the typePHAssetResourceTypeFullSizeVideo
does not count as a video type before, making the resource obtain ignore them.- Fixes potential range exception when converting
NSTimeInterval
on Darwin. - Fixes progress not being updated when getting the non-original video file on iOS.
- Fixes incorrect Live Photo resource being obtained which will result in a wrong aspect ratio.
- Fixes Live Photos saving exceptions with the paired video.
- Other lints and type promotion fixes.
saveImage
now requires filename
rather than title
, other save methods do not require title
anymore.
- Allows saving assets with a given orientation value.
- Improves the reading sequence when saving assets, which likely fixes issues with wrong orientation value.
- Reads image size from EXIF rather than decoding from the bitmap factory.
- Upgrades Android EXIF library.
- Add verbose log for
MethodChannelPlugin
. (UsePhotoManager.setLog
and passverboseFilePath
to enable it.) - Add
getVerboseFilePath
forPhotoManager
.
- Access
PMProgressHandler
more safely on iOS/macOS to avoid crashes and unfinished results.
- Do not require
WRITE_EXTERNAL_STORAGE
if not declared in the manifest with Android 29-. - Fix
fetchPathProperties
exception on Android of API 28.
- Declare
NSPrivacyAccessedAPICategoryFileTimestamp
for iOS privacy policies.
- Fixes compile exceptions with Xcode versions that are not compatible with iOS 17.0.
- Modified the way to read the Java version in
build.gradle
.
- Restores
containsLivePhotos
totrue
by default and deprecates it. - Use the main resource's filename for the title by default on iOS.
- Support more methods on the OpenHarmony.
- Fix obtaining the correct resource from various types of resources on iOS.
- Fix
isLocallyAvailable
for edited assets on iOS.
- Update plugin structure for OpenHarmony.
AssetPathEntity.darwinType
andAssetPathEntity.darwinSubtype
are deprecated.containsLivePhotos
now defaults tofalse
.
See the Migration Guide for details of breaking changes.
- Support OpenHarmony.
- Do not predicate subtype images as adjusted on Darwin.
- Fix
PMProgressHandler
not getting notified when failed on Darwin. - Merge Android API 29 and 30
PermissionDelegate
s which allows Android API 29 to grant permissions withoutWRITE_EXTERNAL_STORAGE
.
- Improve code formatting.
- Add privacy file for iOS/macOS. (#1120)
See the Migration Guide for details of breaking changes.
- Remove the restriction of
getMediaUrl
.
- Fix
PhotoManager.editor.deleteWithIds
method not working on Android API 29. - Dispatch channel calls in main thread on Darwin.
- Fix
presentLimit
did not finish on Android. (#1052) - Fix
requestPermissionExtend
returns the incorrect status on Android API 34.
- Upgrade android/build.gradle to load the current java version from some environment variables.
- Fix the
setIgnorePermissionCheck
method not working on Android.
See the Migration Guide for details of breaking changes.
- Support Android 14 with limited access to assets.
- Correct the key when fetching video info with MMR on Android. (#997)
- Retrieve original media instead of one with adjustments/filters for subtype files on iOS. (#976)
- Returns original file name instead of
FullSizeRender.*
if this has adjustments on iOS. (#976)
- Add locks to the image provider.
- Fix namespace on Android.
- Remove the package definition from the manifest.
- Use
math.pow(2^63)-1
to make Web compile work again. - Fix the
end
argument ofPhotoManager.getAssetListRange
is being handled incorrectly on Darwin. (#962)
- Support
darwinType
anddarwinSubType
inAssetPathEntity
on iOS and macOS. (#950)
- Roll dependencies on Android. (#933)
- Fix filter option group. (#919)
- Fix
originFileWithSubtype
andfileWithSubtype
for livePhoto. - Fix: support only add permission for iOS/macOS. (#944)
- Fix: modified the output path for iOS(add id in next path).
- Fix: Fixed a possible problem with the permission for darwin.
- Fix:
needTitle
forCustomFilter
.
- Support
CustomFilter
for more filter options. (#901) - Add two new static methods for
PhotoManager
:getAssetCount
for getting assets count.getAssetListRange
for getting assets between start and end.
- Reply errors when thumbnails are failed to load on Android. (#883)
- Fix pending permissions request on Android. (#879)
- Always declare
READ_EXTERNAL_STORAGE
permission on Android. (#874) - Upgrade Glide and Kotlin libraries version. (#872)
- Avoid using file-based saving methods on Android. (#871)
- Use
ContentUris
for retrieving Media URIs on Android. (#870) - Improve media subtype on iOS. (#863)
- Support saving Live Photos on iOS and macOS. (#851)
- Introduce
DarwinEditor
to replaceIosEditor
. (#855)
- Expose
frame
forAssetEntity.thumbnailDataWithSize
. (#850)
- Use last modified date for Glide caches key on Android. (#848)
- Support both legacy and scoped storage on Android. (#833)
- Avoid duplicate
copyItemAtURL
for videos on iOS. (#840) - Correct permission checks with
requestPermissionExtend
on Android 13. (#843)
- Support Android 13 (API 33) permissions.
- Adapt Flutter 3.3. (#820)
- Retrieve metadata for videos when empty on Android. (#819)
- Fix saving videos with path on Android 29-. (#829)
- Fix saving images with path on Android 29-. (#815)
- Introduce
AssetPathEntity.assetCountAsync
getter, which improves the speed when loading paths mainly on iOS, also:- Deprecate
AssetPathEntity.assetCount
. - Remove
FilterOptionGroup.containsEmptyAlbum
.
- Deprecate
- Improve assets change notify with better methods signature and checks. (#790)
- Add
PermissionState.hasAccess
getter for better condition judgement. (#792) - Remove unnecessary assets fetch in
getMediaUrl
on iOS. (#793) - Improve
AssetEntity.obtainForNewProperties
on iOS. (#794) - Improve
MD5Utils
on iOS. (#802) - Improve cache container mutations on iOS. (#803)
- Improve assets count assignments. (#804)
- Improve cursors conversion on Android. (#806)
- Purpose video creation correctly on iOS. (#791)
- Mark assets as favorite on iOS. (#794)
- Fix not replied method calls (#800).
- Fix invalid
RELATIVE_PATH
obtains with cursors on Android Q-. (#810)
- [iOS] Check
canPerformEditOperation
before performing change requests. (#782)
- [Android] Fix
orientation
missing during conversions. (#783)
- Expose
PhotoManager.plugin
. (#778)
- Fix
forceOldApi
not well-called. (#778) - Fix invalid type cast with
AssetEntity.exists
. (#777)
- Correct
PermissionRequestOption
typo with a class type alias. Which also raised the Dart SDK constraint to2.13.0
. - Catch throwables when reading EXIF.
- Improve Live-Photos filtering.
- Protect cursors convert on Android. (#761)
- Present exceptions in the image provider when debugging. (#766)
- Fix
ACCESS_MEDIA_LOCATION
checks on Android. (#765)
- Support Flutter 3.
- (Not working) Ignore the null-aware operator for
PaintingBinding
's instance in order to solve the coming lint issues with Flutter 2.13, and keeps the compatibility of previous Flutter versions. - Fix dart docs generate issues.
- Using
ContentResolver
as much as possible on Android. (#755)
- Fix assets pagination issues on Android 29+. (#748)
- Fix file caches clearing on iOS. (#743)
- Improve
AssetEntity.titleAsync
's implementation on iOS. (#740)
- Fix invalid
InputStream
when saving images on Android. (#736)
- Improve
getMediaUrl
on iOS. - Read orientation when saving images on Android. (#730)
- Improve generic type casts on Android. (#732)
- Ensure file exists before reading EXIF on Android. (#728)
- Update legacy external storage exception on Android.
- Predicate more precise permissions requirements on Android <29. (#723)
A major version release for performance improvements, new features, issues fixed, and breaking changes. Also, the LICENSE has been updated with the new author FlutterCandies.
See the Migration Guide for details of breaking changes.
- Add
mimeTypeAsync
. (#717) - Add
ThumbnailSize
. (#709) - Add
DurationConstraint.allowNullable
. (#681) - Introduce
AssetEntityImageProvider
. (#669, #709) - Support "Live Photos" with obtaining and filtering. (#667, #670, #673, #719)
- Support to obtain the first frame for the video thumbnail on Android. (#658)
- Allow plugin to be mocked/overridden with tests. (#703)
- Improve path modified injection and asset count fetching. (#712)
- Make all entities immutable. (#708)
- Improve the performance when using the
file
getter on iOS. (#705) - Force legacy storage on Android Q. (#701)
- Enhance request types filtering.
- Compile for API 31 on Android.
- Throw when obtaining media URL that asset is not locally available on iOS.
- Retrieve width/height from ExifInterface for fallback on Android. (#686)
- Request
WRITE_EXTERNAL_STORAGE
only when needed. (#675) - Provided a single-page example. (#672)
- Improve the default sort order on all platforms. (#659)
- Add equality comparison for various classes. (#657)
- Run Glide on the current thread on Android. (#656)
- Improve thread pool on Android. (#637)
- Improved all documents and code formats. (#626, #660, #664, #671)
- Reorganized all internal structures.
- Rename org to
com.fluttercandies
. (#624) ImageScanner
->PhotoManager
. (#611)
- Fix
Activity
leaks when detached on Android. (#716) - Fix potential NPE when moving assets on Android.
- Fix edited images/videos are not returned correctly on iOS. (#622, #636)
- Fix
title
argument causes saving methods failed. (#619, #635) - Fix
PhotoManager.editor.copyAssetToPath
returnsnull
. (#619) - Fix sort order issues on iOS/macOS. (#603, #655)
- Allow all kinds of
PHAssetCollection
which should expand the support for shared albums. (#641)
- Fix compile error on Xcode 12 for iOS 14. (#630)
- Fix
presentLimited
issues on iOS 14 real devices. (#627)
- Improve sort orders on all platforms. (#623)
- Improve sort orders on iOS. (#620)
- Prettify file name on iOS. (#615)
- Support
presentLimited
with the new API on iOS 15. (#609)
- Obtain more albums on iOS/macOS. (#601)
- Loosen comparison between
AssetEntity
s.
- Apply more fields to compare between entities.
fetchPathProperties
returned wrongisAll
on iOS. (#580)updateTimeCond
not constructed correctly withFilterOptionGroup
.
- Repo cleanup.
- Removed recursive calls with progress handler. (#577)
We're bumping the minor version because we've achieved recent goals and applied multiple ### Fixes which make this plugin as the most solid ever.
- Add orientated getters. (#575)
- Saving methods return null. (#573)
- Improve
AssetEntity.getMediaUrl()
behaviors.
- Merge all fields for
FilterOptionGroup
. - Make
AssetEntity.isLocallyAvailable
as aFuture
getter.
- Apply further fix to #559 .
- Repo cleanup.
- #558
- #559
- #560
- Fix
open
setting for macOS. - Fix
setLog
for iOS and macOS.
saveImage
method missing file extension for the fallback title.openSettings
method.
- Add assets count change when notify on iOS.
- Add some properties and methods for change notify.
- Change notify issue on remove callback.
- Reply result for
presentLimited
method.
- Add request permissions result listener when activity re-attached. (#515)
- An error of iOS. See #509 and #510 .
- Add
requestPermissionExtend
code to support iOS 14 permission. - Add update limited photos method for iOS 14.
- Permissions dialog of launch on old iOS versions. (#503)
- The
MEDIA_LOCATION
permission of android can be removed through configuration.
- Revert #478 .
- Fix thumbnail size of the entity on iOS/macOS.
- Merged #478 .
- Merged the code of macOS and ios.
- Updated the code in the macOS part.
thumbWithSize
ofAssetEntity
.
modified
ofAssetPathEntity
.- Update constructor of
FilterOptionGroup
.
- Order option of the
FilterOptionGroup
.
- Add relative path when saving files to the MediaStore on Android 29+ (#462)
- Fix deleteWithIds typecast issue with Android 29- (#460)
- Add mime type for android.
- Fix serious code usage issue in convert utils.
- Improve the constructor for
AssetEntity
.
- Fix orientation bug.
- Migrate to null safety.
- Correct type in
PMRequestState
.
- Support multiple sorting conditions, and the
asc
ofDateTimeCond
is removed.
- Support android API 30.
- Support show empty album in iOS (#365).
- User can ignore check permission(User can choose favorite permission plugin, but at the same time user have to bear the risks corresponding to the permission).
- Support clean file cache.
- Experimental
- Preload image (Use
PhotoCachingManager
api.)
- Preload image (Use
- Add
OrderOption
as sort condition. The option default value is order by create date desc; - Support icloud asset progress.
- #362
- Delete assets in androidQ.
- Edited image data in iOS.
- Fix delete error in androidR.
- Delete assets in androidQ.
- Audio asset error for androidQ. See #340 and #341 .
- Fix save image with path for android.
- Remove verbose log.
- Add
merge
forFilterOptionGroup
andFilterOption
.
- Add
copyWith
forFilterOption
.
- Support android v2 model.
- Cannot get audio problem in androidQ.
- Support macOS.
- From the version, Starting from this version, 1.9 or earlier versions are not supported.
- Save image asset with file path.
- Copy asset to another album.
- Create AssetEntity with id.
- Create AssetPathEntity from id.
- Only iOS
- Create folder or album.
- Remove assets in album.
- Delete folder or album.
- Favorite asset.
- Only android
- move asset to another path.
- Remove all non-existing rows.
- add
relativePath
for android.
- Modified
AssetEntity.file
's behavior on iOS, it will return a picture in jpg format instead of heic/gif/png currently. Now more in line with the description in the doc, this is suitable for uploading images (theoretically, no Exif information will be included). - Update android change media url from file scheme to content scheme.
- Clean up some unused code.
- Problem of AssetPathEntity.refreshPathProperties.
- Open setting in iOS.
- Edited asset in iOS.
- Audio properties of FilterOption.
- Android onlyAll assetCount bug.
- Add date condition to filter datetime
- Add class
DateTimeCond
- Add
dateTimeCond
toFilterOptionGroup
- Remove
fetchDateTime
fromgetAssetPathList
- Remove param
dt
fromAssetPathEntity.refreshPathProperties
, and addrefreshPathProperties
params to the method. - Split video filter and image filter.
- Add
getSubPathEntities
forAssetPathEntity
. - Add
quality
forAssetEntity.thumbDataWithSize
. - Add
orientation
forAssetEntity
. - Add
onlyAll
forgetAssetPathList
. - Support audio type(Only android, iOS Photos have no audio)
- iOS code is running background thread.
- getThumb is running in background thread.
- exists error on android.
- use edited origin file on iOS.
- galleryName maybe is null in android.
- thumb of android 10.
- #169
- #170
- Add
FilterOption
for methodgetAssetPathList
.
- originFile of
AssetEntity
- location(
latitude
,longitude
) ofAssetEntity
title
ofAssetEntity
originBytes
ofAssetEntity
- param
format
inthumbDataWithSize
of assetEntity.
- Can't get thumb/file of video on androidQ.
- Compatibility code, when the width and height of the video is empty, it can still be scanned.
- Add a default value to
type
ofgetAssetPathList
.
- Delete asset.
- Add Image.
- Add Video.
- Add modifyDate property.
- Fix videoDuration error.
- CreateDate error.
- Fix ios get full file size error.
- Fix ios build error.
- Some properties in the entity were modified from asynchronous to synchronous.
- Remove
isCache
params. Now,getAssetPathList
will reload info everytime. If user want to cacheList<AssetPathEntity>
, then user must do it manually.
- Added a method
getAssetListPaged
for paging loading resources to path. The paging implementation is lazy loading, that is, the resource corresponding information is loaded when requested. The entity corresponding to the path is no longer placed in the memory, but is implemented by PHPhoto (ios) and sqlite's limit offset (android). - Support AndroidQ privacy.
- Fix iCloud image problem.
- Support flutter 1.6.0 android's thread changes for channel.
- Fix customizing album containing folders on iOS.
AssetEntity
add property:originFile
.
AssetEntity
add property:exists
.
- Support Android X. This shouldn't result in any functional changes, but it requires any Android apps using this plugin to also migrate if they're using the original support library.
- Add a method to create
AssetEntity
with id. - Add
isCache
for methodgetImageAsset
,getVideoAsset
orgetAssetPathList
. - Add observer for photo change.
- Add field
createTime
forAssetEntity
.
- Fix NPE for image crash on android.
- Add
getVideoAsset
andgetImageAsset
to load video / image.
- Add asset size field.
- Add cache release method.
- Fix when number of photo/video is 0, will crash.
- Add video duration.
- Sort asset by date.
- Fix Android's latest picture won't be found.
- Update gradle wrapper version.
- Update kotlin version.
- Fix Android to get pictures that are empty bug.
- Support ios icloud image and video.
- Update all path
hasVideo
property.
- Add a params to help user disable get video.
- iOS get video file is async.
- Fix 'ios video full file is a jpg' problem.
- Support video in android.
- Change API from ImageXXXX to AssetXXXX.
- Update for the issue #1. (NPE when request other permission on android)
- Update README.
First version.
- API for photo.