QR 코드 스캔(QR Code Scan) 초간단 예제(Simple example)

https://pub.dev/packages 에서 qrscan 검색


AndroidManifest.xml 퍼미션 추가

위치 : project/android/app/src/main/AndroidManifext.xml

안드로이드의 카메라와 저장소 제어를 위한 퍼미션을 추가해 준다.

실제 우리가 테스트하는 코드에는 굳이 저장소 관련은 필요 없지만 qrscan 패키지 내에서 모두 사용하니 어쩔 수 없다.

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:qrscan/qrscan.dart' as scanner; //qrscan 패키지를 scanner 별칭으로 사용.

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _output = 'Empty Scan Code';
  @override
  initState() {
    super.initState();    
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.grey[300],
        body: Builder(
          builder: (BuildContext context) {
            return Center( 
              //정 가운데에 QR 스켄값 표시
              child: Text(_output, style: TextStyle(color: Colors.black)),);
          },
        ),
        //플로팅 액션 버튼으로 qr 스캔 함수 실행
        floatingActionButton: FloatingActionButton(
          onPressed: () => _scan(),
          tooltip: 'scan',
          child: const Icon(Icons.camera_alt),
        ),
      ),
    );
  }
  
  //비동기 함수     
  Future _scan() async {
    //스캔 시작 - 이때 스캔 될때까지 blocking
    String barcode = await scanner.scan();
    //스캔 완료하면 _output 에 문자열 저장하면서 상태 변경 요청.
    setState(() => _output = barcode);   
  }
}