728x90
반응형
디바이스의 이미지 정보를 불러오고 싶을 때 유용한 photo_manager 에 대해서 포스팅 합니다.
셋팅
pubspec.yaml
dependencies:
photo_manager: ^2.1.4
android/app/src/main/AndroidManifest.xml
<manifest
.
.
<application
.
.
// 추가
android:requestLegacyExternalStorage="true"
>
</application>
</manifest>
ios/Runner/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
.
.
.
// 추가
<key>NSPhotoLibraryUsageDescription</key>
<string>In order to access your photo library</string>
</dict>
</plist>
권한 확인
final _ps = await PhotoManager.requestPermissionExtend();
if (_ps.isAuth) {
// 수락
} else {
// 거절
// await PhotoManager.openSetting(); // 권한 설정 페이지 이동
}
앨범 목록
List<AssetPathEntity> album = await PhotoManager.getAssetPathList(
hasAll : true,
onlyAll : false,
type : RequestType.common,
filterOption : FilterOptionGroup()
);
// 전체보기를 제외하고 불러옵니다.
hasAll : true, // bool
// 전체보기만 불러옵니다.
onlyAll : false, // bool
// 불러올 파일의 형식을 정의합니다.
type : RequestType.common, // image, video, audio
// 불러올 파일의 조건을 정의합니다.
filterOption : FilterOptionGroup(),
FilterOptionGroup
- PhotoManager.getAssetPathList() 에서 불러올 파일의 조건을 정하는 filterOption 이며 인자는 다음과 같습니다.
// 이미지를 불러올 조건 지정
imageOption : const FilterOption(),
// 동영상을 불러올 조건 지정
videoOption : const FilterOption(),
// 음성파일을 불러올 조건 지정
audioOption : const FilterOption(),
// 비어있는 앨범을 불러올지 여부
containsEmptyAlbum : false,
// 수정된 경로 포함여부
containsPathModified : false,
// 라이브 포토 포함여부
containsLivePhotos : true,
// 라이브 포토만 불러올지 여부
onlyLivePhotos : false,
// 생성시간 범위 지정
// min - DateTime
// max - DateTime
// ignore - bool
createTimeCond : DateTimeCond(min : DateTime(), max : DateTime()),
// 갱신시간 범위 지정
// min - DateTime
// max - DateTime
// ignore - bool
updateTimeCond : DateTimeCond(min : DateTime(), max : DateTime()),
// 불러올 파일의 정렬 순서를 지정
// type - OrderOptionType.createDate , OrderOptionType.updateDate
// asc - bool
orders : const <OrderOption>[OrderOption(type:OrderOptionType.createDate)],
FilterOption
- image, video, audio 파일을 불러올 조건을 정할 수 있으며 인자는 다음과 같습니다.
// title 포함 여부
needTitle : false,
// 파일의 크기 제한
sizeConstraint : const SizeConstraint(
minWidth : 0,
maxWidth : 100000,
minHeight : 0,
maxHeight : 100000,
ignoreSize : false
),
// 파일의 기간 제한
// 이미지는 이 제약을 무시
durationConstraint : const DurationConstraint(),
앨범의 이미지 정보
- List<AssetPathEntity> 에서 앨범마다 이미지 정보를 불러올 수 있습니다.
- getAssetListPaged() 로 불러오고 page 와 size 를 지정합니다.
// 앨범 목록
List<AssetPathEntity> album = await PhotoManager.getAssetPathList();
// 앨범 이미지 목록
List<AssetEntity> images = await album[0].getAssetListPaged(page: 0, size: 80);
- AssetPathEntitiy 마다 id 값이 존재합니다.
- 위의 예시처럼 이미지를 가져올 수도 있지만 id 를 통해 single 로 찾을 수 있습니다.
AssetPathEntity({
required this.id, // 앨범 id
required this.name, // 앨범명
this.assetCount = 0,
this.albumType = 1,
this.lastModified,
this.type = RequestType.common,
this.isAll = false,
FilterOptionGroup? filterOption,
})
AssetEntityImage
- AssetPathEntitiy에서 가져온 이미지 정보를 AssetEntityImage 위젯에 넣어주어 나타낼 수 있습니다.
// 앨범 목록
List<AssetPathEntity> album = await PhotoManager.getAssetPathList();
// 앨범 이미지 목록
List<AssetEntity> images = await album[0].getAssetListPaged(page: 0, size: 80);
GridView(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
children: images.map((AssetEntity e) =>
// AssetEntityImage
AssetEntityImage(e, isOriginal: false)
).toList(),
),
728x90
반응형
'Flutter > Package' 카테고리의 다른 글
[Flutter] GetX ① - 소개 (0) | 2022.08.28 |
---|---|
[Flutter] image_picker (1) | 2022.08.13 |
[Flutter] dio (0) | 2022.08.07 |
[Flutter] Bloc ⑤ - Bloc Test (0) | 2022.08.05 |
[Flutter] Bloc ④ - context.read, context.watch, context.select (0) | 2022.08.05 |