[flutter] 플러터에서 path_provider를 이용하여 사진 저장하기

이번에는 Flutter에서 path_provider 패키지를 사용하여 사진을 저장하는 방법에 대해 알아보겠습니다. path_provider 패키지는 앱의 파일 시스템 경로를 찾을 수 있도록 도와줍니다. 이를 통해 플러터 앱에서 파일을 저장하고 접근할 수 있습니다.

1. path_provider 패키지 추가하기

프로젝트의 pubspec.yaml 파일에 path_provider 패키지를 추가해야합니다. 아래의 예시를 따라주세요:

dependencies:
  flutter:
    sdk: flutter
  path_provider: ^2.0.5

패키지를 추가한 후에는 터미널에서 flutter pub get 명령어를 실행하여 패키지를 다운로드 및 의존성을 설정해야합니다.

2. 사진 저장하기

path_provider 패키지를 사용하여 사진을 저장하는 예시 코드는 다음과 같습니다:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';

class SavePhotoScreen extends StatefulWidget {
  @override
  _SavePhotoScreenState createState() => _SavePhotoScreenState();
}

class _SavePhotoScreenState extends State<SavePhotoScreen> {
  File? _image;

  Future<void> savePhoto(BuildContext context) async {
    // 디바이스의 외부 저장소 폴더 경로 얻기
    Directory? appDir = await getExternalStorageDirectory();
    if (appDir == null) return;

    // 폴더 생성
    Directory imagesDir = Directory("${appDir.path}/images");
    if (!await imagesDir.exists()) {
      await imagesDir.create(recursive: true);
    }

    // 이미지 파일 생성 및 저장
    File newImage = File("${imagesDir.path}/my_photo.jpg");
    await _image!.copy(newImage.path);

    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text("사진 저장됨: ${newImage.path}")),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("사진 저장"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            _image != null ? Image.file(_image!) : Container(),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 이미지 선택
                FilePickerResult? result = await FilePicker.platform.pickFiles(
                  type: FileType.image,
                );
                if (result != null) {
                  setState(() {
                    _image = File(result.files.single.path!);
                  });
                }
              },
              child: Text("사진 선택"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _image != null
                  ? () {
                      savePhoto(context);
                    }
                  : null,
              child: Text("사진 저장"),
            ),
          ],
        ),
      ),
    );
  }
}

위의 코드는 플러터에서 사진 선택 후 외부 저장소에 저장하는 간단한 예제입니다. getExternalStorageDirectory 함수를 통해 디바이스의 외부 저장소 경로를 얻고, Directory를 사용하여 폴더를 생성한 후, File을 만들어 선택한 이미지를 해당 폴더에 복사하여 저장합니다.

3. 실행 및 결과 확인

위의 예시 코드를 사용하여 앱을 실행하고 사진을 선택한 후 “사진 저장” 버튼을 누르면 이미지가 지정한 경로에 저장되는 것을 확인할 수 있습니다.

이렇게 path_provider 패키지를 이용하여 플러터 앱에서 사진을 저장할 수 있습니다. 이를 통해 사용자의 사진을 앱 내부에 저장하거나 외부로 공유하는 기능을 구현할 수 있습니다.

더 자세한 정보는 path_provider 패키지 공식 문서를 참고하시기 바랍니다.