NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #594 most downloaded on pub.dev
A Flutter plugin that provides album assets abstraction management APIs on Android, iOS, macOS, and OpenHarmony.
Last release 2 months ago
09 Aug 2026
Release timing varies
gaps range from 8 days to 6 months
Nearly every release is documented
notes for 58 of the last 60 stable releases
4 versions withdrawn
withdrawn after publishing
8 years old
189 releases · first in 2018
The Darwin (iOS/macOS) implementation no longer links CoreLocation , so apps that do not save assets with location no longer need an NSLocationWhenInU
Breaking changes
CoreLocation, so apps that do not save assets with location no longer need an NSLocationWhenInUseUsageDescription purpose string (#1428). Saving with latitude/longitude on iOS/macOS now throws; install the photo_manager_location plugin to keep that capability (which links CoreLocation).Fixes
PHAsset.filename selector. The Darwin title lookup now uses the public PHAssetResource.originalFilename API directly instead of KVC'ing into the non-public filename selector.Add AndroidEditor.restoreFromTrash to restore assets from the Android system trash.
One column per quarter.
Features
AndroidEditor.restoreFromTrash to restore assets from the Android system trash.AssetEntity.isTrashed exposing the Android MediaStore.MediaColumns.IS_TRASHED state.Fixes
android.builtInKotlin is unset.Fix presentLimited() on iOS resolving the presenting view controller through the deprecated UIApplication.keyWindow , which can return the wrong windo…
Features
type parameter to AssetPathEntity.getAssetListPaged and AssetPathEntity.getAssetListRange so callers can filter to a specific RequestType within a single album (e.g. read videos out of a common album) without constructing a new AssetPathEntity. Defaults to the album's own type when omitted.AssetEntity.darwin and AssetPathEntity.darwin that group PhotoKit-specific reads without bloating the shared entity classes:
asset.darwin.cloudIdentifier and the batch PhotoManager.plugin.getCloudIdentifiers resolve stable cross-device cloud identifiers (iOS 15+/macOS 12+).asset.darwin.hasAdjustments reports whether an asset has edits, and asset.darwin.getBaseFile() exports the unedited base file.asset.darwin.getAdjustmentData() exports the raw AAE adjustment (edit-history) data backing an asset's edits, so callers can access the original resource, the edit metadata, and the rendered result separately (non-destructive editing).path.darwin.getParentPathList() returns the parent folders containing an album or folder.updateCreationDate to PhotoManager.editor.darwin and PhotoManager.editor.android for modifying an asset's creation date after it has been saved.
PHAsset.creationDate property.DATE_TAKEN field; unsupported on API 28 and below.PhotoManager.canManageMedia() and PhotoManager.requestManageMedia() for the Android 12 (API 31+) MANAGE_MEDIA special permission.Improvements
kotlin-android, without changing the package's public Flutter or Dart version constraints.namespace to com.fluttercandies.photo_manager so it matches the plugin package and Kotlin sources.Fixes
PlatformExceptions from IllegalArgumentException: Volume external_primary not found by returning an empty cursor when MediaProvider reports the primary volume as unavailable, and guard the media-store ContentObserver against the same exception.AssetEntity.originFile returning the locally-downsampled proxy for iCloud + "Optimize iPhone Storage"-affected photos by preferring PHImageManager with HighQualityFormat over writeDataForAssetResource on unedited raster primaries.PhotoManager.editor.darwin.saveLivePhoto returning PHPhotosErrorDomain (-1) when the caller-supplied image and video lacked the shared Live Photo pairing identifier PHAssetCreationRequest requires.Unsupported fetch for asset collections with type 2 and subtype 2 when navigating into the primary album, caused by an invalid SmartAlbum + AlbumRegular combination in the recent-collection check.AssetEntity.loadFile / originFile sporadically failing with PHPhotosErrorDomain (-1) for edited assets and Live Photos by walking multiple PHAssetResource candidates and falling back to PHImageManager for plain videos/images when writeDataForAssetResource exhausts them.AssetEntity.duration API docs to clarify that audio and video durations are returned in seconds across supported platforms, preserving the existing API behavior.presentLimited(), the changes are now properly notified to the Flutter layer.deleteWithIds, removeInAlbum, and deleteAlbum to QOS_CLASS_USER_INITIATED.RequestType. The plugin now only requests READ_MEDIA_IMAGES / READ_MEDIA_VIDEO matching the caller's RequestType, so the Android 14+ system photo picker only shows the media types the app actually asked for.AssetEntity.duration matches the system album display more closely.getTitleAsync returning a null channel result by falling back to an empty string.darwinFileType, restoring iOS conversions such as Live Photo MOV-to-MP4 output.loadFile(isOrigin: false) blocking the iOS UI thread by making the request asynchronous and moving JPEG file conversion off the main thread, allowing PMProgressHandler updates to arrive while loading.presentLimited() on iOS resolving the presenting view controller through the deprecated UIApplication.keyWindow, which can return the wrong window (or none) once an app adopts the UIScene life cycle. The plugin now prefers the FlutterViewController attached to its own engine and falls back to scanning the foreground-active UIWindowScene for the key window.latitude/longitude/latLng being dropped whenever a coordinate component was exactly 0.0 (e.g. assets near the equator or prime meridian). Dart, Android, and iOS/macOS all used 0.0 as a "no location" sentinel; 0.0 is now treated as a valid coordinate, and the native platforms report the absence of location data as an explicit null instead.CC_MD5-based hash used to derive Darwin full-image cache filenames from PHAsset.localIdentifier with CC_SHA256, silencing the macOS 10.15+ deprecation warnings from CommonCrypto without changing observable behavior. Existing cached files under the plugin cache directory are re-created on first access after upgrade.Improve output file extension recognition for Darwin platforms.
Improvements
CustomColumns to use platform-separated architecture.AndroidCustomColumns, DarwinCustomColumns, OhosCustomColumns) for CustomColumns.UnsupportedError when using CustomFilter in non-mobile environments (e.g., CI/Unit tests).compileSdkVersion to 36 for Android.Full Changelog: v3.8.3...v3.9.0
Fix all media assets being returned when filterOption is not specified instead of respecting the requested type.
Fixes
filterOption is not specified instead of respecting the requested type.Full Changelog: v3.8.2...v3.8.3
What's Changed Fixes Fix presentLimited type error. Full Changelog : v3.8.1...v3.8.2
Fixes
presentLimited due to map type inference issue with putIfAbsent.Fix SQL syntax error on Android when querying assets with pagination.
Fixes
Full Changelog: v3.8.0...v3.8.1
Fixes
Add Swift Package Manager support for iOS and macOS.
Features
cancelToken parameter to AssetEntity.loadFile.cancelAllRequest method to PhotoManager.AssetEntity.getFile and AssetEntity.getOriginBytes methods are public.relativePathAsync getter to AssetPathEntity.smartAlbumSpatial - For spatial/3D photossmartAlbumProRes - For ProRes videossmartAlbumScreenRecordings - For screen recordingssmartAlbumReceipts - For receipts in the Utilities sectionsmartAlbumHandwriting - For handwriting in the Utilities sectionsmartAlbumIllustrations - For illustrations in the Utilities sectionsmartAlbumQRCodes - For QR codes in the Utilities sectionlatitude, longitude, and creationDate parameters to saveImage, saveImageWithPath, and saveVideo methods.
createWriteRequest API for Android 11+.Improvements
FilterOptionGroups when querying paths and assets.PermissionState.isLimited.Fixes
type 'Null' is not a subtype of type 'Map<dynamic, dynamic>' error on Android when copying or moving assets fails.
copyAssetToGallery or moveAssetToGallery operations fail.PlatformException.fetchThumb, exportAssetToFile, fetchFullSizeImageFile.fetchVideoResourceToFile, fetchOriginImageFile.saveImage, saveImageWithPath, saveVideo, saveLivePhoto.AssetEntity.latlngAsync() returning zero location for videos on Android by using MediaMetadataRetriever to extract location data from video files.title parameter in saveVideo and saveImageWithPath methods.Full Changelog: v3.7.1...v3.8.0
jvmTarget update by @AlexV525 in #1292
Add includeHiddenAssets option to PMFilter and FilterOptionGroup to include hidden assets in the results on iOS.
includeHiddenAssets option to PMFilter and FilterOptionGroup to include hidden assets in the results on iOS.SizeConstraint not working for videos on Android. (#1275)thumbnailDataWithSize. (#1271)sourceCompatibility and targetCompatibility for Android dynamically.Full Changelog: v3.6.4...v3.7.0
Fix potential nil class value when unwrapping caught exceptions on Darwin.
Fixes
Optimize task priority handling on Darwin by automatically assigning QoS levels based on method types.
Improvements
Fixes
Fix request permissions for images and videos on Android API 33+.
Fixes
Do not throw when querying non-existing assets in bulk on Android.
Fixes
Allows to get the duration of a Live Photo with AssetEntity.durationWithOptions on iOS and macOS.
Features
AssetEntity.durationWithOptions on iOS and macOS.Improvements
Fixes
privateFileURL on iOS 18+.Get rid of @try @catch when toggling favorite on Darwin.
Improvements
@try @catch when toggling favorite on Darwin.Fixes
Reuse files when saving images on Darwin.
Improvements
Provide PMDarwinAVFileType to help convert entities' files on iOS and macOS by making explicit exports.
Features
PMDarwinAVFileType to help convert entities' files on iOS and macOS by making explicit exports.Improvements
PHCachingImageManager to improve image memory caches on iOS and macOS.Fixes
saveLivePhoto now requires title rather than filename.
Breaking Changes
saveLivePhoto now requires title rather than filename.
Features
getPermissionState method to PhotoManager.Improvements
progressHandler for AssetEntity.getMediaUrl.withSubtype for AssetEntity.isLocallyAvailable to request if a Live Photo resource is available.Fixes
PHAssetResource with the type PHAssetResourceTypeFullSizeVideo does not count as a video type before,
making the resource obtain ignore them.NSTimeInterval on Darwin.saveImage now requires filename rather than title, other save methods do not require title anymore.
Breaking Changes
saveImage now requires filename rather than title, other save methods do not require title anymore.
Improvements
MethodChannelPlugin. (Use PhotoManager.setLog and pass verboseFilePath to enable it.)getVerboseFilePath for PhotoManager.Access PMProgressHandler more safely on iOS/macOS to avoid crashes and unfinished results.
Fixes
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-.
Fixes
WRITE_EXTERNAL_STORAGE if not declared in the manifest with Android 29-.fetchPathProperties exception on Android of API 28.Declare NSPrivacyAccessedAPICategoryFileTimestamp for iOS privacy policies.
Improvements
NSPrivacyAccessedAPICategoryFileTimestamp for iOS privacy policies.Fixes
build.gradle.Restores containsLivePhotos to true by default and deprecates it.
Improvements
containsLivePhotos to true by default and deprecates it.Fixes
isLocallyAvailable for edited assets on iOS.Update plugin structure for OpenHarmony.
Improvements
See the [Migration Guide][] for details of breaking changes.
Breaking Changes
AssetPathEntity.darwinType and AssetPathEntity.darwinSubtype are deprecated.containsLivePhotos now defaults to false.See the [Migration Guide][] for details of breaking changes.
Features
Fixes
PMProgressHandler not getting notified when failed on Darwin.PermissionDelegates
which allows Android API 29 to grant permissions without WRITE_EXTERNAL_STORAGE.Improvements
See the [Migration Guide][] for details of breaking changes.
Breaking Changes
See the [Migration Guide][] for details of breaking changes.
Improvements
getMediaUrl.Fixes
PhotoManager.editor.deleteWithIds method not working on Android API 29.presentLimit did not finish on Android. (#1052)requestPermissionExtend returns the incorrect status on Android API 34.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Upgrade android/build.gradle to load the current java version from some environment variables.
Fixes
setIgnorePermissionCheck method not working on Android.See the [Migration Guide][] for details of breaking changes.
Breaking Changes
See the [Migration Guide][] for details of breaking changes.
Features
Fixes
FullSizeRender.* if this has adjustments on iOS. (#976)Improvements
Nothing published for this version
Remove the package definition from the manifest.
Fixes
math.pow(2^63)-1 to make Web compile work again.end argument of PhotoManager.getAssetListRange is being handled incorrectly on Darwin. (#962)Support darwinType and darwinSubType in AssetPathEntity on iOS and macOS.
Features
darwinType and darwinSubType in AssetPathEntity on iOS and macOS. (#950)Improvements
Fixes
originFileWithSubtype and fileWithSubtype for livePhoto.needTitle for CustomFilter.Support CustomFilter for more filter options.
Features
CustomFilter for more filter options. (#901)PhotoManager:
getAssetCount for getting assets count.getAssetListRange for getting assets between start and end.Reply errors when thumbnails are failed to load on Android.
Improvements
Always declare READ_EXTERNAL_STORAGE permission on Android.
Improvements
READ_EXTERNAL_STORAGE permission on Android. (#874)ContentUris for retrieving Media URIs on Android. (#870)Fix pending permissions request on Android.
Fixes
Support saving Live Photos on iOS and macOS.
Features
DarwinEditor to replace IosEditor. (#855)Use last modified date for Glide caches key on Android.
Improvements
Support both legacy and scoped storage on Android.
Features
Fixes
copyItemAtURL for videos on iOS. (#840)requestPermissionExtend on Android 13. (#843)Nothing published for this version
Nothing published for this version
Support Android 13 (API 33) permissions.
Features
Improvements
Fixes
Nothing published for this version
Nothing published for this version
Fix saving images with path on Android 29-.
Fixes
Deprecate AssetPathEntity.assetCount.
Breaking Changes
AssetPathEntity.assetCountAsync getter,
which improves the speed when loading paths mainly on iOS, also:
AssetPathEntity.assetCount.FilterOptionGroup.containsEmptyAlbum.Improvements
PermissionState.hasAccess getter for better condition judgement. (#792)getMediaUrl on iOS. (#793)AssetEntity.obtainForNewProperties on iOS. (#794)MD5Utils on iOS. (#802)Fixes
RELATIVE_PATH obtains with cursors on Android Q-. (#810)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[iOS] Check canPerformEditOperation before performing change requests.
Improvements
canPerformEditOperation before performing change requests. (#782)Fixes
orientation missing during conversions. (#783)Fix forceOldApi not well-called.
Improvements
PhotoManager.plugin. (#778)Fixes
forceOldApi not well-called. (#778)AssetEntity.exists. (#777)Correct PermissionRequestOption typo with a class type alias. Which also raised the Dart SDK constraint to 2.13.0.
Improvements
PermissionRequestOption typo with a class type alias.
Which also raised the Dart SDK constraint to 2.13.0.Your coding agent can read these notes before it upgrades. Set up the MCP server →