Flutter/Package

[Flutter] photo_manager

찌김이 2022. 8. 11. 21:44
728x90
반응형

디바이스의 이미지 정보를 불러오고 싶을 때 유용한 photo_manager 에 대해서 포스팅 합니다.

 

photo_manager | Flutter Package

A Flutter plugin that provides assets abstraction management APIs on Android, iOS, and macOS.

pub.dev

 

셋팅

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