[flutter] 플러터(Flutter)에서 사진 촬영 및 갤러리 접근하기

플러터(Flutter)는 Google에서 개발한 크로스 플랫폼 앱 개발 프레임워크로, 하나의 코드베이스로 안드로이드와 iOS 앱을 개발할 수 있습니다. 이번에는 플러터에서 사진을 촬영하고 갤러리에 접근하는 방법을 알아보겠습니다.

1. 카메라 접근

플러터에서는 camera 라이브러리를 통해 카메라에 접근할 수 있습니다. 먼저 pubspec.yaml 파일에 camera의 의존성을 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  camera: ^0.8.1+3

의존성을 추가한 후, pub get 명령어를 실행하여 패키지를 가져옵니다.

$ flutter pub get

카메라 화면을 표시하려면 camera 패키지의 CameraPreview 위젯을 사용합니다. 아래는 간단한 예제 코드입니다.

import 'package:camera/camera.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final cameras = await availableCameras();
  final firstCamera = cameras.first;

  runApp(
    MaterialApp(
      home: CameraScreen(
        camera: firstCamera,
      ),
    ),
  );
}

class CameraScreen extends StatefulWidget {
  final CameraDescription camera;

  const CameraScreen({required this.camera});

  @override
  _CameraScreenState createState() => _CameraScreenState();
}

class _CameraScreenState extends State<CameraScreen> {
  late CameraController _controller;
  late Future<void> _initializeControllerFuture;

  @override
  void initState() {
    super.initState();
    _controller = CameraController(
      widget.camera,
      ResolutionPreset.medium,
    );

    _initializeControllerFuture = _controller.initialize();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder<void>(
        future: _initializeControllerFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return CameraPreview(_controller);
          } else {
            return Center(child: CircularProgressIndicator());
          }
        },
      ),
    );
  }
}

2. 갤러리 접근

이어서 플러터에서 갤러리에 접근하는 방법을 알아보겠습니다. image_picker 패키지를 사용하여 간단하게 구현할 수 있습니다. 먼저 pubspec.yaml 파일에 image_picker의 의존성을 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  image_picker: ^0.8.4+4

의존성을 추가한 후, pub get 명령어를 실행하여 패키지를 가져옵니다.

$ flutter pub get

갤러리에서 사진을 선택하기 위해 image_picker 패키지의 ImagePicker 클래스를 사용합니다. 아래는 간단한 예제 코드입니다.

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

class GalleryScreen extends StatelessWidget {
  final ImagePicker _picker = ImagePicker();

  void _openGallery(BuildContext context) async {
    final XFile? image = await _picker.pickImage(source: ImageSource.gallery);
    if (image != null) {
      // 선택한 사진을 처리하는 로직 작성
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Gallery Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => _openGallery(context),
          child: Text('Open Gallery'),
        ),
      ),
    );
  }
}

위 코드에서 ImagePicker 클래스의 pickImage 메서드를 사용하여 갤러리에서 사진을 선택할 수 있습니다. 선택한 사진은 XFile 객체로 반환되며, 이를 이용하여 원하는 로직을 처리할 수 있습니다.

결론

위의 코드를 통해 플러터에서 카메라를 통해 사진을 촬영하고, 갤러리에서 사진을 선택하는 방법을 알아보았습니다. 플러터의 cameraimage_picker 패키지를 통해 다양한 사진 관련 기능을 구현할 수 있습니다.

참고 자료