APP/Flutter

플러터 폰에 저장된 이미지 가져오려면 image_picker 설치, 사용

개발자 aloe 2022. 8. 12. 15:55
728x90

image_picker 설치와 셋팅

 

폰의 사진파일 가져다쓸 땐 요즘은 허락받을 필요 없습니다. 그냥 쓸 수 있습니다.

 

1. pubspec.yaml 파일 열고 

dependencies:
  image_picker: ^0.8.4+4

image_picker 추가하고 pub get 누르면 됩니다.

 

 

 

2. ios/Runner/Info.plist 파일 열고

<key>NSPhotoLibraryUsageDescription</key>
<string>사진첩좀 써도 됩니까</string>
<key>NSCameraUsageDescription</key>
<string>카메라좀 써도 됩니까</string>
<key>NSMicrophoneUsageDescription</key>
<string>마이크 권한좀 제발</string>

이런 코드를 <dict> 하단에 추가하면 됩니다. 

사용자에게 허락팝업 띄울 때 보이는 글자들입니다. 

 

 

3. dart파일 맨 위에 

import 'package:image_picker/image_picker.dart';
import 'dart:io';

추가하면 됩니다. 

둘째는 파일 다루는 유용한 함수가 들어있는 기본 패키지입니다. 

 

 

 

 

 

image_picker 사용법

 

AppBar 우측 버튼에 이렇게 코드를 짜봤습니다. 

onPressed: () async {
  var picker = ImagePicker();
  var image = await picker.pickImage(source: ImageSource.gallery);
}

저거 2줄 사용하면 이미지 선택화면이 뜹니다. 

저장된 사진이 없으면 폰으로 사진 몇장 찍어보십시오 

 

picker.pickImage(source: ImageSource.camera);

이러면 사진선택하는 갤러리 말고 카메라를 띄워줍니다.

picker.pickVideo(source: ImageSource.gallery);

이러면 비디오 선택화면이 뜹니다. 

picker.pickMultiImage(source: ImageSource.gallery);

이러면 여러 이미지 선택이 가능합니다. 

 

- 고른 이미지 사이즈, 화질 조정도 가능합니다. 

- photofilters 이런 패키지 설치하면 이미지에 필터도 씌울 수 있습니다.

 

 

 

 

 

선택한 이미지 다루기

 

이미지는 용량이 크기 떄문에 

이미지를 변수에 저장해놓고 쓰는게 아니라 

이미지의 경로만 가져와서 변수에 저장하고 쓰는게 일반적입니다.

 

 

 

onPressed: () async {
  var picker = ImagePicker();
  var image = await picker.pickImage(source: ImageSource.gallery);
   if (image != null) {
    setState((){
      userImage = File(image.path);
    });
  }
  
}

그래서 상단에 var userImage 이런 state 하나 만들고

거기 저장하라고 했습니다. 선택 안하면 null 일까봐 if문으로 체크도 좀 해줬습니다.

근데 이걸 실제 위젯같은 곳에 보여주려면 어떻게 코드를 짜야하냐면 

 

 

 

 

선택한 이미지를 위젯으로 보여주려면

 

Image.file(userImage) 이렇게 쓰면 보입니다.

이미지 파일경로를 넣으면 이미지로 보여주는 위젯입니다. 

Upload() 위젯안에 저걸 써서 보여주도록 합시다.

근데 userImage 이 변수는 MyApp() 위젯 안에 있네요?

 

 

 

그럼 MyApp -> Upload 이렇게 변수를 보내면 됩니다. 

보내고 Image.file(userImage) 이거 쓰면 이제 진짜로 보임

 

 

 

 

 

728x90