[flutter] 바코드 스캔 결과를 텍스트 파일로 내보내는 방법

이번에는 Flutter 앱에서 바코드 스캔 결과를 텍스트 파일로 내보내는 방법에 대해 알아보겠습니다. 바코드 스캔은 많은 앱에서 사용되는 기능 중 하나이며, 사용자가 스캔한 바코드를 나중에 참조할 수 있도록 텍스트 파일로 저장하는 것은 유용한 기능입니다.

1. flutter_barcode_scanner 패키지 설치하기

우선 바코드 스캔 기능을 제공하는 패키지를 설치해야 합니다. Flutter에서는 flutter_barcode_scanner 패키지를 사용할 수 있습니다. pubspec.yaml 파일에 아래의 의존성을 추가해주세요.

dependencies:
  flutter_barcode_scanner: ^3.0.1

의존성을 추가한 후, 패키지를 설치하기 위해 터미널에서 flutter pub get 명령어를 실행해주세요.

2. 바코드 스캔 기능 추가하기

스캔 기능을 사용하기 위해 다음 코드 스니펫을 참고하세요.

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

class BarcodePage extends StatefulWidget {
  @override
  _BarcodePageState createState() => _BarcodePageState();
}

class _BarcodePageState extends State<BarcodePage> {
  String _barcode = '';

  Future<void> _scanBarcode() async {
    String barcodeResult = await FlutterBarcodeScanner.scanBarcode(
        '#ff6666', 'Cancel', true, ScanMode.BARCODE);

    setState(() {
      _barcode = barcodeResult;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Barcode Scanner'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'Scan Result:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 10),
            Text(
              _barcode,
              style: TextStyle(fontSize: 16),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _scanBarcode,
              child: Text('Scan Barcode'),
            ),
          ],
        ),
      ),
    );
  }
}

위 코드는 BarcodePage라는 StatelessWidget을 상속받는 위젯입니다. 코드에서 중요한 부분은 _scanBarcode 메서드입니다. 이 메서드에서는 FlutterBarcodeScanner.scanBarcode를 호출하여 바코드를 스캔하고, 결과를 _barcode 변수에 저장합니다.

3. 바코드 스캔 결과를 텍스트 파일로 내보내기

이제 바코드를 스캔한 결과를 텍스트 파일로 내보내는 기능을 구현해보겠습니다. 텍스트 파일로 저장하기 위해 path_provider 패키지를 사용할 것입니다. 우선 pubspec.yaml 파일에 path_provider 패키지의 의존성을 추가해주세요.

dependencies:
  path_provider: ^2.0.2

의존성을 추가한 후, 패키지를 설치하기 위해 터미널에서 flutter pub get 명령어를 실행해주세요.

다음으로, 내보낼 텍스트 파일의 경로를 얻기 위해 getExternalStorageDirectory 메서드를 사용할 것입니다. 이 메서드는 Android에서는 외부 저장소 경로를 제공하고, iOS에서는 앱의 도큐먼트 디렉터리를 제공합니다. 아래의 코드를 참고하여 _exportBarcode 메서드를 추가해주세요.

import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';

Future<void> _exportBarcode() async {
  String barcodeResult = _barcode;

  // 바코드를 저장할 텍스트 파일 경로 얻기
  Directory? directory = await getExternalStorageDirectory();
  if (directory != null) {
    String filePath = path.join(directory.path, 'barcode.txt');
    File file = File(filePath);

    // 텍스트 파일에 바코드 저장
    await file.writeAsString(barcodeResult);

    showDialog(
      context: context,
      builder: (_) => AlertDialog(
        title: Text('Exported Barcode'),
        content: Text('Barcode saved to ${file.path}'),
        actions: [
          TextButton(
            onPressed: () => Navigator.pop(context),
            child: Text('OK'),
          ),
        ],
      ),
    );
  }
}

위 코드에서는 _exportBarcode 메서드에서 _barcode 변수에 저장된 바코드를 가져온 뒤, 텍스트 파일을 저장할 경로를 얻어옵니다. 그리고 File 클래스를 사용하여 파일을 생성하고, writeAsString 메서드로 바코드를 텍스트 파일에 저장합니다.

텍스트 파일에 바코드를 저장한 뒤, 다이얼로그를 표시하여 사용자에게 저장됐음을 알려줍니다.

4. 앱에서 바코드 스캔 결과 내보내기

마지막으로, BarcodePage 위젯에 내보내기 버튼을 추가하고 _exportBarcode 메서드를 호출하는 로직을 추가해야 합니다. 다음 코드를 참고하여 _buildExportButton 메서드를 추가해주세요.

Widget _buildExportButton() {
  return ElevatedButton(
    onPressed: _exportBarcode,
    child: Text('Export Barcode'),
  );
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Barcode Scanner'),
    ),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text(
            'Scan Result:',
            style: TextStyle(fontSize: 20),
          ),
          SizedBox(height: 10),
          Text(
            _barcode,
            style: TextStyle(fontSize: 16),
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: _scanBarcode,
            child: Text('Scan Barcode'),
          ),
          SizedBox(height: 10),
          _buildExportButton(),
        ],
      ),
    ),
  );
}

위 코드에서는 _buildExportButton 메서드를 사용하여 내보내기 버튼을 생성하고, 그 아래에 버튼을 추가했습니다. 내보내기 버튼을 누르면 _exportBarcode 메서드가 호출되어 바코드를 텍스트 파일로 내보냅니다.

결론

이제 Flutter 앱에서 바코드 스캔 기능을 사용하고, 스캔한 결과를 텍스트 파일로 내보낼 수 있습니다. 사용자가 스캔한 바코드를 나중에 참조해야 할 때 텍스트 파일로 저장하는 것은 매우 편리한 방법입니다.