The document only describes the equivalent changes to the API. If you want to see the new feature support, please refer to readme and change log.
- Migration Guide
In order to let developers write the most precise API usage,
the filename
of saveLivePhoto
has migrated to title
.
Before:
final entity = await PhotoManager.editor.saveLivePhoto(
imageFile: imageFile,
videoFile: videoFile,
filename: 'live_0',
);
After:
final entity = await PhotoManager.editor.saveLivePhoto(
imageFile: imageFile,
videoFile: videoFile,
title: 'live_0',
);
In order to let developers write the most precise API usage,
the title
of saveImage
has migrated to filename
.
Before:
final entity = await PhotoManager.editor.saveImage(bytes, title: 'new.jpg');
After:
final entity = await PhotoManager.editor.saveImage(bytes, filename: 'new.jpg');
containsLivePhotos
now defaults tofalse
instead oftrue
.AssetPathEntity.darwinType
andAssetPathEntity.darwinSubtype
are deprecated.
Live Photos are used to being obtained when querying images and videos, the behavior sometimes causes drama that users don't want to see images when getting videos. The flag is now disabled by default.
The extra information of the album type has been abstract as AlbumType
which contains Darwin (iOS/macOS) and OpenHarmony album information.
The new class deprecates AssetPathEntity.darwinType
and AssetPathEntity.darwinSubtype
,
AssetPathEntity.albumTypeEx
should be used instead.
Before:
final path = await AssetPathEntity.fromId('');
final PMDarwinAssetCollectionType? darwinType = path.darwinType;
final PMDarwinAssetCollectionSubtype? darwinSubtype = path.darwinSubtype;
After:
final path = await AssetPathEntity.fromId('');
final PMDarwinAssetCollectionType? darwinType = path.albumTypeEx?.darwin?.type;
final PMDarwinAssetCollectionSubtype? darwinSubtype = path.albumTypeEx?.darwin?.subtype;
- Use
Editor.darwin
instead ofEditor.iOS
. - Use
PermissionRequestOption
instead ofPermisstionRequestOption
. - Use
AssetPathEntity.assetCountAsync
instead ofAssetPathEntity.assetCount
. - Removed
AssetEntityImage
andAssetEntityImageProvider
.
These classes are no longer provided from the package.
Instead, include
photo_manager_image_provider
to use AssetEntityImage
and AssetEntityImageProvider
.
import 'package:photo_manager_image_provider/photo_manager_image_provider.dart';
Methods invoked with assets permission no longer call for permissions implicitly. Users must follow the below methods to ensure permissions were granted:
PhotoManager.requestPermissionExtend()
, verify if the result isauthorized
orlimited
.PhotoManager.setIgnorePermissionCheck(true)
, ignoring permission checks, or handle permissions with other mechanisms.
PhotoManager.editor.deleteWithIds
only move assets to the trash on Android 30 and above.
AssetPathEntity.assetCount
has been deprecated, and added a new asynchronized getterassetCountAsync
.FilterOptionGroup.containsEmptyAlbum
has been removed.
Before you can easily access total count of a path:
int get count => path.assetCount;
Now you can only use the new getter:
int count = await path.assetCountAsync;
Be aware that the change is to improve when gathering info from paths, which means usages with the previous field should be migrated to separate requests to improve the performance.
This version mainly covers all valid issues, API deprecations, and few new features.
- The org name has been updated from
top.kikt
tocom.fluttercandies
. - The plugin name on native side has been updated from
ImageScanner
toPhotoManager
. AssetPathEntity
andAssetEntity
are now immutable.title
are required when using saving methods.RequestType.common
is the default type for all type request.- Arguments with
getAssetListPaged
are now required with name. PhotoManager.notifyingOfChange
has no setter anymore.PhotoManager.refreshAssetProperties
andPhotoManager.fetchPathProperties
have been moved to entities.containsLivePhotos
aretrue
by default. If you previously usedRequestType.video
to filter assets, they'll include live photos now. To keep to old behavior, you should explicitly setcontainsLivePhotos
tofalse
in this case.isLocallyAvailable
now passesisOrigin
, so it's been changed toisLocallyAvailable()
.
There are several APIs have been removed, since they can't provide precise meanings, or can be replaced by new APIs. If you've used these APIs, consider migrating them to the latest version.
Removed API/class/field | Migrate destination |
---|---|
PhotoManager.getImageAsset |
PhotoManager.getAssetPathList(type: RequestType.image) |
PhotoManager.getVideoAsset |
PhotoManager.getAssetPathList(type: RequestType.video) |
PhotoManager.fetchPathProperties |
AssetPathEntity.fetchPathProperties |
PhotoManager.refreshAssetProperties |
AssetEntity.refreshProperties |
PhotoManager.requestPermission |
PhotoManager.requestPermissionExtend |
AssetPathEntity.assetList |
N/A, use pagination APIs instead. |
AssetPathEntity.refreshPathProperties |
AssetPathEntity.obtainForNewProperties |
AssetEntity.createDtSecond |
AssetEntity.createDateSecond |
AssetEntity.fullData |
AssetEntity.originBytes |
AssetEntity.thumbData |
AssetEntity.thumbnailData |
AssetEntity.refreshProperties |
AssetEntity.obtainForNewProperties |
FilterOptionGroup.dateTimeCond |
FilterOptionGroup.createTimeCond |
ThumbFormat |
ThumbnailFormat |
ThumbOption |
ThumbnailOption |
Before:
AssetPathEntity.getAssetListPaged(0, 50);
After:
AssetPathEntity.getAssetListPaged(page: 0, size: 50);
Before:
final List<AssetPathEntity> paths = PhotoManager.getAssetPathList(type: RequestType.video);
After:
final List<AssetPathEntity> paths = PhotoManager.getAssetPathList(
type: RequestType.video,
filterOption: FilterOptionGroup(containsLivePhotos: false),
);
Before:
final bool isLocallyAvailable = await entity.isLocallyAvailable;
After:
// .file is locally available.
final bool isFileLocallyAvailable = await entity.isLocallyAvailable();
// .originFile is locally available.
final bool isOriginFileLocallyAvailable = await entity.isLocallyAvailable(
isOrigin: true,
);
Before:
final bool isSucceed = await PhotoManager.editor.darwin.favoriteAsset(
entity: entity,
favorite: true,
);
After:
/// If succeed, a new entity will be returned.
final AssetEntity? newEntity = await PhotoManager.editor.darwin.favoriteAsset(
entity: entity,
favorite: true,
);
This version is a null-safety version.
Please read document for null-safety information in dart or flutter.
Before:
final dtCond = DateTimeCond(
min: startDt,
max: endDt,
asc: asc,
)..dateTimeCond = dtCond;
After:
final dtCond = DateTimeCond(
min: startDt,
max: endDt,
);
final orderOption = OrderOption(
type: OrderOptionType.createDate,
asc: asc,
);
final filterOptionGroup = FilterOptionGroup()..addOrderOption(orderOption);