안드로이드와 iOS 모두 플러터에서는 앱 외부 저장소에 파일을 저장할 수 있습니다. 앱 외부 저장소는 사용자가 앱에 접근하지 않아도 파일에 접근할 수 있는 공용 공간입니다. 이 글에서는 플러터에서 앱 외부 저장소에 파일을 저장하는 방법을 알아보겠습니다.
1. permission_handler 패키지 추가하기
먼저, 앱 외부 저장소에 접근하기 위해서는 permission_handler
패키지를 추가해야 합니다. pubspec.yaml
파일에 다음과 같이 패키지를 추가해주세요:
dependencies:
flutter:
sdk: flutter
permission_handler: ^12.0.0
2. 앱 사용자에게 권한 요청하기
안드로이드에서는 WRITE_EXTERNAL_STORAGE
권한을 획득해야 앱 외부 저장소에 파일을 저장할 수 있습니다. iOS에서는 별도의 권한 요청이 필요하지 않습니다.
import 'package:permission_handler/permission_handler.dart';
Future<void> requestPermission() async {
PermissionStatus status = await Permission.storage.request();
if (status.isDenied) {
// 권한이 거부되었을 때
} else if (status.isGranted) {
// 권한이 승인되었을 때
}
}
3. 파일 저장하기
사용자로부터 권한을 받고나면, 플러터에서 파일을 저장할 수 있습니다. 다음은 텍스트 파일을 저장하는 예제입니다.
import 'dart:io';
import 'path_provider/path_provider.dart';
Future<void> saveFile(String fileName, String content) async {
Directory? directory = await getExternalStorageDirectory();
if (directory != null) {
File file = File("${directory.path}/$fileName");
await file.writeAsString(content);
}
}
위 예제 코드에서는 path_provider
패키지를 이용하여 외부 저장소의 디렉토리 경로를 얻고, 해당 경로에 파일을 생성하고 내용을 저장합니다.
4. 예외 처리하기
파일 저장을 할 때는 파일 생성 및 쓰기에 실패할 수 있는 예외 상황을 항상 처리해야 합니다. 위 코드에서는 directory
가 null
이면 파일을 저장하지 않고 있습니다. 필요에 따라 예외 처리를 추가로 구현해주세요.
import 'dart:io';
import 'path_provider/path_provider.dart';
Future<void> saveFile(String fileName, String content) async {
try {
Directory? directory = await getExternalStorageDirectory();
if (directory != null) {
File file = File("${directory.path}/$fileName");
await file.writeAsString(content);
} else {
// 디렉토리를 찾을 수 없음
}
} catch (e) {
// 예외 처리
}
}
마무리
이제 플러터에서 앱 외부 저장소에 파일을 저장하는 방법을 알아봤습니다. 사용자에게 권한을 요청하고 나서 path_provider
패키지를 이용하여 디렉토리 경로를 얻어 파일을 생성하고 내용을 저장할 수 있습니다. 파일 저장 시 예외 처리를 추가하면 안정적인 앱 개발이 가능합니다.