개요
just_save_gallery는 이름 그대로 갤러리에 저장만 하는 Flutter 플러그인이다. 갤러리 읽기, 삭제, 목록 조회 같은 기능 없이 오직 이미지와 비디오 저장 한 가지에만 집중한다. Uint8List 바이트 데이터와 파일 경로 입력을 모두 지원하며, Android와 iOS에서 동작한다.
주요 기능
- 바이트 데이터 저장:
Uint8List로 이미지/비디오를 직접 갤러리에 저장 - 파일 경로 저장: 파일 경로를 넘기면 확장자로 미디어 타입을 자동 판별하여 저장 (대용량 비디오에 메모리 효율적)
- 커스텀 앨범 지원: 원하는 앨범/폴더명을 지정하여 저장 가능
- 자동 파일명 넘버링: 중복 파일명이 있으면 자동으로 번호를 매겨 충돌 방지
- 내장 권한 처리: 저장 시 자동으로 권한을 요청하며,
requestPermission: false로 직접 제어 가능 - 타입 기반 에러 핸들링:
SaveException과SaveErrorCode로 권한 거부, 디스크 풀, 잘못된 포맷 등을 구분 처리
지원 플랫폼
| 플랫폼 | 지원 여부 |
|---|---|
| Android | ✅ |
| iOS | ✅ |
기술적 특징
- Android: MediaStore API를 사용하며, API 29 이상에서는
IS_PENDING플래그를 활용한 Scoped Storage를 지원한다. API 28 이하에서만WRITE_EXTERNAL_STORAGE권한이 필요하다. - iOS:
PHPhotoLibrary를 사용한다. 기본적으로 add-only 권한(NSPhotoLibraryAddUsageDescription)만 요청하고,albumName파라미터를 사용할 때만 read/write 권한을 요청하여 TCC 크래시를 방지한다. - 최소 의존성:
plugin_platform_interface외에 추가 의존성이 없어 패키지 크기가 가볍다. - Platform Channel 구조: 표준 Flutter 플러그인 아키텍처를 따르며, Method Channel 기반으로 네이티브 코드와 통신한다.
왜 주목할까?
갤러리 관련 Flutter 패키지들은 대부분 읽기, 삭제, 목록 조회 등 다양한 기능을 포함하고 있어 불필요한 권한을 요구하거나 패키지가 무거운 경우가 많다. just_save_gallery는 "저장만 한다"는 단일 책임 원칙에 충실하여, 카메라 앱이나 다운로더처럼 갤러리에 미디어를 저장하기만 하면 되는 앱에서 최소한의 권한과 의존성으로 목적을 달성할 수 있다. 타입 기반 에러 핸들링과 자동 권한 처리로 보일러플레이트 코드도 줄여준다.