[flutter] 스캔된 바코드 정보를 데이터베이스에 저장하는 방법

개요

이번 포스트에서는 플러터(Flutter) 어플리케이션에서 바코드를 스캔한 후 해당 정보를 데이터베이스에 저장하는 방법에 대해 알아보겠습니다. 바코드 스캐너와 데이터베이스 연동을 통해 사용자가 스캔한 바코드 정보를 영구적으로 저장할 수 있습니다.

필요한 패키지 설치

플러터 어플리케이션에서 바코드 스캐너와 데이터베이스를 사용하기 위해 다음 패키지를 설치해야 합니다.

dependencies:
  barcode_scan: any
  sqflite: any
  path_provider: any

위의 패키지들은 플러터 앱에서 바코드 스캔 기능을 제공하는 barcode_scan 패키지와 데이터베이스 연동을 위한 sqflite 패키지, 그리고 데이터베이스 파일을 저장하기 위한 path_provider 패키지입니다.

바코드 스캔하기

우선, 앱에서 바코드를 스캔하기 위해 barcode_scan 패키지를 이용하겠습니다. 아래와 같이 바코드 스캔을 수행하는 기능을 추가합니다.

import 'package:barcode_scan/barcode_scan.dart';
import 'package:flutter/services.dart';

Future<void> scanBarcode() async {
  try {
    String barcode = await BarcodeScanner.scan();
    print('Scanned Barcode: $barcode');
    
    // 데이터베이스에 저장하는 로직 추가
    saveBarcode(barcode);
  } on PlatformException catch (e) {
    if (e.code == BarcodeScanner.cameraAccessDenied) {
      print('Camera access denied');
    } else {
      print('Unknown error: $e');
    }
  } catch (e) {
    print('Error: $e');
  }
}

위의 코드에서 BarcodeScanner.scan() 함수를 호출하여 카메라를 사용하여 바코드를 스캔합니다. 스캔된 바코드는 barcode 변수에 저장됩니다. 이후 saveBarcode(barcode) 함수를 호출하여 스캔된 바코드를 데이터베이스에 저장하는 로직을 추가합니다.

바코드 저장하기

바코드를 스캔한 후에는 해당 정보를 데이터베이스에 저장해야 합니다. 이를 위해 sqflite 패키지를 이용하여 데이터베이스를 생성하고 바코드를 저장하는 함수를 구현합니다.

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

Future<void> saveBarcode(String barcode) async {
  // 데이터베이스 생성
  final database = openDatabase(
    join(await getDatabasesPath(), 'barcode_database.db'),
    onCreate: (db, version) {
      return db.execute(
        'CREATE TABLE barcodes(id INTEGER PRIMARY KEY, barcode TEXT)',
      );
    },
    version: 1,
  );

  // 바코드 저장
  final db = await database;
  await db.insert(
    'barcodes',
    {'barcode': barcode},
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}

위의 코드에서 openDatabase() 함수를 이용하여 데이터베이스를 생성합니다. getDatabasesPath() 함수는 데이터베이스 파일을 저장할 경로를 반환합니다. onCreate 콜백 함수에서 테이블을 생성하는 SQL문을 실행하여 바코드를 저장할 테이블을 생성합니다.

saveBarcode() 함수에서는 openDatabase() 함수로 얻은 데이터베이스 변수 db를 이용하여 insert() 함수를 호출하여 바코드를 저장합니다. conflictAlgorithm: ConflictAlgorithm.replace 옵션은 동일한 바코드가 이미 존재하는 경우 해당 바코드를 업데이트합니다.

이제 scanBarcode() 함수에서 스캔된 바코드를 데이터베이스에 저장하는 기능을 사용할 수 있습니다.

결론

이번 포스트에서는 플러터 어플리케이션에서 바코드를 스캔한 후 해당 정보를 데이터베이스에 저장하는 방법에 대해 알아보았습니다. 바코드 스캔을 위해 barcode_scan 패키지를 사용하고, 데이터베이스 연동을 위해 sqflite 패키지를 사용하였습니다. 이를 통해 사용자가 스캔한 바코드 정보를 영구적으로 저장할 수 있습니다.