[flutter] 플러터 바코드 스캔 앱에서 사진 촬영 기능 추가하기

안녕하세요! 이번에는 플러터 바코드 스캔 앱에 사진 촬영 기능을 추가하는 방법에 대해 알아보겠습니다. 바코드 스캔 앱에 사진 촬영 기능을 추가하면 바코드를 스캔한 후에 해당 상품의 사진도 함께 저장할 수 있습니다.

단계 1: 카메라 패키지 추가하기

먼저, 플러터에서 카메라를 사용하기 위해 카메라 패키지를 추가해야 합니다. pubspec.yaml 파일을 열고 dependencies 섹션에 다음과 같이 camera 패키지를 추가합니다:

dependencies:
  camera: ^0.7.0

변경 사항을 저장하고 패키지를 다운로드합니다. 터미널에서 다음 명령을 실행하세요:

$ flutter pub get

단계 2: 사진 촬영 버튼 추가하기

이제 사진 촬영 기능을 추가할 스캔 화면에 사진 촬영 버튼을 추가해보겠습니다.

import 'dart:io';

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

class ScanScreen extends StatefulWidget {
  @override
  _ScanScreenState createState() => _ScanScreenState();
}

class _ScanScreenState extends State<ScanScreen> {
  late CameraController _controller;
  late Future<void> _initializeControllerFuture;

  @override
  void initState() {
    super.initState();

    // 사용 가능한 카메라 목록 가져오기
    availableCameras().then((cameras) {
      // 첫 번째 카메라를 사용
      _controller = CameraController(cameras[0], ResolutionPreset.medium);

      // 카메라 초기화
      _initializeControllerFuture = _controller.initialize();
    });
  }

  @override
  void dispose() {
    // 컨트롤러 해제
    _controller.dispose();

    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('바코드 스캔'),
      ),
      body: FutureBuilder(
        future: _initializeControllerFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            // 카메라 미리 보기 생성
            return CameraPreview(_controller);
          } else {
            // 로딩 화면 표시
            return Center(child: CircularProgressIndicator());
          }
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _takePicture();
        },
        child: Icon(Icons.camera),
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
    );
  }

  Future<void> _takePicture() async {
    try {
      // 사진 촬영
      XFile pictureFile = await _controller.takePicture();

      // 촬영한 사진 가져오기
      File imageFile = File(pictureFile.path);
      
      // 가져온 사진을 사용해서 원하는 동작 수행
      // ...

      // 사진 촬영 후 카메라 화면 다시 업데이트
      _initializeControllerFuture = _controller.initialize();
      setState(() {});
    } catch (e) {
      // 에러 처리
    }
  }
}

위 코드에서 _takePicture 메서드는 사진을 촬영하고 해당 사진을 사용해서 원하는 동작을 수행합니다. 사진 촬영 후에는 카메라 화면을 다시 업데이트하기 위해 _initializeControllerFuture를 초기화하고 상태를 업데이트합니다.

결론

이제 플러터 바코드 스캔 앱에 사진 촬영 기능이 추가되었습니다! 바코드를 스캔한 후 원하는 동작을 추가하여 해당 상품의 사진을 관리할 수 있습니다. 추가적인 기능을 구현하려면 가져온 사진을 서버에 업로드하거나 로컬에 저장하는 등의 작업을 수행할 수도 있습니다. 이를 참고하여 필요한 기능을 구현해보세요.