본문 바로가기
Flutter

플러터(Flutter) - 앨범 사진 가져오기 (Image Picker)

by codeflow 2022. 10. 15.

플러터에서 앨범 사진을 불러올 때는 Image Picker 플러그인을 사용합니다. pub.dev에서 이 플러그인을 "A Flutter plugin for iOS and Android for picking images from the image library, and taking new pictures with the camera."라고 소개하고 있습니다. Image Picker 플러그인을 통해 앨범에서 사진을 선택하거나 카메라로 사진 촬영을 하는 기능을 모두 제공하고 있다고 하네요. 우리는 그중에서 앨범에서 사진을 선택하는 경우를 먼저 살펴봅시다.

Image Picker 코드 구현

먼저 pubspec.yaml 파일에 Image Picker 라이브러리를 의존성으로 추가해줍니다. 그 다음 IDE 메뉴에서 Pub get을 선택해 라이브러리를 실제 프로젝트로 받아옵니다.

Image Picker를 코드에서 호출할 때는 import 'package:image_picker/image_picker.dart'; 구문을 추가해 패키지를 불러옵니다. 이미지를 선택할 때 사용하는 함수는 ImagePicker 클래스의 pickImage라는 메서드 입니다. 선언을 따라가 보면 아래와 같이 파라미터로 이미지 출처를 지정하는 ImageSource 타입의 source를 반드시 넣어주어야 하고, Future<XFile?>형 변수를 리턴합니다. 아래 세 줄의 코드만 있다면 앨범 사진 선택 기능을 구현할 수 있습니다.

import 'package:image_picker/image_picker.dart';
final ImagePicker _picker = ImagePicker();
final XFile? image = await _picker.pickImage(source: ImageSource.gallery);

pickImage 메서드가 호출되면 Nullable한 XFile형 이미지 파일을 리턴하게 되는데, 메서드가 호출되는 즉시 리턴하지 않고 사용자가 앨범에서 이미지를 선택한 후에 해당 이미지를 리턴합니다. 따라서 비동기 처리를 지원하는 Future<T> 타입으로 리턴되고 있습니다.

pickImage() 메서드를 호출할 때도 호출하는 함수에서 async 키워드를 붙여서 비동기 함수임을 알려주고 있습니다. 이 함수 안에서 await로 pickImage() 메서드를 호출해, pickImage() 메서드가 실행 결과를 리턴할 때까지 대기하게 됩니다. 아래 예제는 image가 null이 아닐 때 이미지 경로를 내부 변수에 저장할 때 예시를 보여주고 있습니다.

iOS에서의 주의점

pub.dev의 Image Picker 라이브러리 설명에 따르면, iOS의 경우 앨범에 접근하기 위해 iOS 11 이상 버전에서 requestFullMetadata를 false로 설정하지 않는 한 <project root>/ios/Runner/Info.plist 파일에서 NSPhotoLibraryUsageDescription 키를 명시적으로 넣어줘야 합니다. 간단하게 아래와 같이 넣어주면 됩니다.

댓글