[flutter] 플러터 Riverpod와 카메라 연동 방법

개요

이번 포스트에서는 플러터(Flutter) 앱에서 Riverpod 상태 관리 라이브러리를 사용하여 카메라 기능과 연동하는 방법에 대해 알아보겠습니다. Riverpod는 플러터의 상태 관리 솔루션으로, 앱의 확장성과 유지 보수성을 향상시킬 수 있습니다.

카메라 패키지 설치

우선, 플러터 앱에서 카메라 기능을 사용하기 위해 camera 패키지를 설치해야 합니다. pubspec.yaml 파일에 아래 코드를 추가하여 패키지를 가져오세요.

dependencies:
  camera: ^0.8.1+4

패키지를 가져오기 위해 터미널에서 flutter pub get 명령을 실행하세요.

Riverpod를 사용하여 상태 관리 설정

플러터 앱에서 Riverpod를 사용하기 위해, flutter_riverpod 패키지를 설치해야 합니다. 마찬가지로 pubspec.yaml 파일에 아래 코드를 추가하세요.

dependencies:
  flutter_riverpod: ^0.14.0

패키지를 가져오기 위해 터미널에서 flutter pub get 명령을 실행하세요.

카메라 상태 제공자 생성

camera_provider.dart 파일을 생성하고 아래와 같이 코드를 작성하세요.

import 'package:camera/camera.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

final cameraProvider = FutureProvider<CameraController>((ref) async {
  List<CameraDescription> cameras = await availableCameras();
  if (cameras.length > 0) {
    return CameraController(cameras[0], ResolutionPreset.medium);
  } else {
    throw Exception("No camera found!");
  }
});

위 코드에서 availableCameras() 함수는 사용 가능한 카메라 목록을 가져오는 데 사용됩니다. 여기서는 첫 번째 카메라를 선택하여 CameraController를 생성하고 반환합니다. 카메라가 없는 경우 예외를 발생시킵니다.

앱 레이아웃 작성

main.dart 파일에서 앱 레이아웃을 작성합니다. 아래는 기본적인 앱 레이아웃의 예입니다.

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

import 'camera_provider.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends ConsumerWidget {
  @override
  Widget build(BuildContext context, ScopedReader watch) {
    final cameraController = watch(cameraProvider).data?.value;

    if (!cameraController?.value.isInitialized) {
      return Container();
    }

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Camera App'),
        ),
        body: CameraPreview(cameraController),
      ),
    );
  }
}

cameraProviderwatch 함수로 가져와서 data?.valueCameraController를 얻습니다. 카메라 컨트롤러가 초기화되지 않은 경우 빈 컨테이너를 반환합니다. 그렇지 않은 경우, CameraPreview 위젯을 사용하여 카메라 미리보기를 표시합니다.

권한 설정

Android와 iOS에서 카메라를 사용하기 위한 권한 설정을 해야 합니다. AndroidManifest.xmlInfo.plist 파일에서 아래 권한을 추가하세요.

Android

<uses-permission android:name="android.permission.CAMERA" />

iOS

<key>NSCameraUsageDescription</key>
<string>Enable camera usage to take photos</string>

실행 및 테스트

이제 앱을 실행하여 카메라 기능이 잘 작동하는지 테스트해보세요. 플러터 앱을 실행하면 첫 번째 카메라의 미리보기 화면이 표시됩니다.

결론

이번 포스트에서는 플러터 앱에서 Riverpod 상태 관리와 카메라 연동 방법에 대해 알아보았습니다. Riverpod를 사용하여 카메라 기능을 쉽게 구현하고 상태 관리를 관리할 수 있습니다. 플러터 앱에서 카메라를 사용하는 경우, 이 방법을 참고하여 개발해보세요.