분류, 패키지 및 저장소 검색

flutter_zxing 표지
패키지 상세v3.1.0

flutter_zxing

ZXing 기반의 Flutter와 Dart FFI를 사용한 네이티브 바코드 스캐너 및 생성기입니다.

AndroidiOSmacOSWindowsLinux
30일 다운로드
4.8만
좋아요
150
Pub 점수
160

패키지 설치

flutter pub add flutter_zxing

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

flutter_zxing은 Dart FFI를 통해 ZXing 라이브러리를 사용하여 네이티브 바코드 스캔 및 생성을 가능하게 하는 Flutter 패키지입니다. Android, iOS, macOS, Windows, Linux에서 QR 코드와 바코드를 읽고 생성하는 고성능의 크로스플랫폼 기능을 제공합니다. Flutter의 UI와 원활하게 통합되며 최적의 속도와 정확성을 위해 네이티브 코드를 활용합니다. 실시간 스캔과 사용자 지정 카메라 설정을 지원하여 신뢰할 수 있는 바코드 상호작용이 필요한 애플리케이션에 적합합니다.

사용 사례

  • 모바일 재고 관리
  • 디지털 티켓팅 시스템
  • 제품 정보 조회
  • QR 코드를 통한 연락처 공유
  • 결제 코드 스캔

주요 기능

  • Dart FFI를 통한 네이티브 성능
  • 크로스 플랫폼 지원
  • 실시간 바코드 스캔
  • 사용자 정의 가능한 카메라 설정
  • QR 코드 및 바코드 생성

적합한 대상

  • 빠른 바코드 스캔이 필요한 앱
  • 네이티브 수준의 성능을 원하는 개발자
  • 다중 플랫폼 모바일 애플리케이션
  • 소매 및 물류 소프트웨어
  • 이벤트 또는 티켓팅 플랫폼

고려 사항

  • 모든 플랫폼에서 카메라 권한이 필요합니다
  • 웹용 추가 구성이 필요할 수 있습니다
  • 지원되는 플랫폼에 제한됨(기본적으로 웹은 지원되지 않음)
  • 카메라 미리보기는 사용자 지정 위젯 처리가 필요할 수 있습니다
  • 빌드 설정은 플랫폼에 따라 약간 다를 수 있습니다

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

Flutter ZXing

Flutter ZXing is a high-performance Flutter plugin for scanning and generating QR codes and barcodes. Built on the powerful ZXing C++ library, it provides fast and reliable barcode processing capabilities for Flutter applications. Whether you need to scan barcodes from the camera or generate custom QR codes, Flutter ZXing makes it seamless and efficient.


Table of Contents


Demo Screenshots

Scanner Screen Creator Screen

Left: Barcode Scanner, Right: QR Code Creator


Features

  • Scan QR codes and barcodes from the camera stream (on mobile platforms only), image file, or URL.
  • Scan multiple barcodes at once from the camera stream (on mobile platforms only), image file, or URL.
  • Generate QR codes with customizable content and size.
  • Return the position points of the scanned barcode.
  • Customizable scanner frame size and color, and the ability to enable or disable features like torch and pinch to zoom.

Supported Formats

Linear product Linear industrial Matrix
UPC-A Code 39 QR Code
UPC-E Code 93 Micro QR Code ᴿ
EAN-8 Code 128 rMQR Code ᴿ
EAN-13 Codabar Aztec
DataBar DataBar Expanded DataMatrix
DataBar Limited ᴿ ITF PDF417
Telepen ᴿ MicroPDF417 ᴿ
DX Film Edge ᴿ MaxiCode ᴿ

ᴿ read only — these can be scanned but not generated.

Powered by zxing-cpp v3.1.1.


Supported Platforms

Platform Status Notes
Android ✅ Fully Supported Minimum API level 23 (Android 6.0)
iOS ✅ Fully Supported Minimum iOS 13.0
MacOS ⚠️ Beta Minimum macOS 10.15, without camera support
Linux ⚠️ Beta Without Camera support
Windows ⚠️ Beta Without Camera support
Web ❌ Not Supported Dart FFI is not available on the web

Note: Flutter ZXing relies on the Dart FFI feature, making it unsupported on the web. Camera-based scanning is only available on mobile platforms.


ZXScanner

ZXScanner is a free QR code and barcode scanner app for Android and iOS. It is built using Flutter and the flutter_zxing plugin.

ZXScanner logo

Features
  • Fast and reliable QR code and barcode scanning.
  • Built-in support for multiple barcode formats.
  • Fully open-source and customizable.
Try ZXScanner

To learn more or contribute, visit the ZXScanner repository.

Getting Started

Cloning the flutter_zxing project

To clone the flutter_zxing project from Github which includes submodules, use the following command:

git clone --recursive https://github.com/khoren93/flutter_zxing.git
Installing dependencies

Use Melos to install the dependencies of the flutter_zxing project. Melos is a tool that helps you manage multiple Dart packages in a single repository. To install Melos, use the following command:

flutter pub global activate melos

To install the dependencies of the flutter_zxing project, use the following command:

melos bootstrap

To allow the building on iOS and MacOS, you need to run the following command:

./scripts/update_ios_macos_src.sh

To run the integration tests:

cd example
flutter test integration_test

Now you can run the flutter_zxing example app on your device or emulator.

Use with dependency_overrides

If you want to use a forked version of the flutter_zxing library in your project, you can specify it using dependency_overrides in your pubspec.yaml. However, be aware that flutter_zxing relies on the ZXing C++ code included as a git submodule. When using dependency_overrides with a git repository, these submodules are not automatically included, and the update_ios_macos_src.sh script is not run, which can lead to errors, especially on iOS.

Your project might build but encounter runtime errors due to missing library exports that appear as an error like this: flutter: type 'ArgumentError' is not a subtype of type 'Code' in type cast

Recommended Approach: Using a Git Submodule

To ensure all necessary files are present, it's recommended to add your forked repository as a git submodule, initialize the submodules recursively, and reference it using a local path. Follow these steps:

  1. In your project add your fork as a submodule and initialize it recursively.
git submodule add https://github.com/YourUsername/flutter_zxing.git flutter_zxing
git submodule update --init --recursive
  1. Add your submodule to your pubspec.yaml file as a path dependency override.
dependency_overrides:
  flutter_zxing:
    path: ./flutter_zxing
  1. Run flutter pub get to install the dependencies.
  2. Run the scripts/update_ios_macos_src.sh script to update the iOS and MacOS source files. (Or add it to your own projects build process)
  3. Run flutter clean to clear the build cache.
  4. Build and run your project.
Why Not Use a Direct Git Reference?

Referencing your forked repo as a direct git reference in the depenency_overrides section of the pubspec.yaml does not include submodules or run the update_ios_macos_src.sh script. Manually running these steps in the .pub-cache directory is not practical, since the path changes with each commit.

Usage

To read barcode

flutter_zxing re-exports the camera types that appear in its own API (CameraImage, XFile, CameraController, ...), so a single import is enough.

import 'package:flutter_zxing/flutter_zxing.dart';

// Use ReaderWidget to quickly read barcode from camera image
@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ReaderWidget(
      onScan: (result) async {
        // Do something with the result
      },
    ),
  );
}

// Or use flutter_zxing plugin methods
// To read barcode from camera image directly
await zx.startCameraProcessing(); // Call this in initState

cameraController?.startImageStream((image) async {
    final Code result = await zx.processCameraImage(
        image,
        DecodeParams(
            imageFormat: ImageFormat.lum, // the luminance plane of a YUV420/NV21 frame
            format: Format.any,
            width: image.width,
            height: image.height,
        ),
    );
    if (result.isValid) {
        debugPrint(result.text);
    }
});

zx.stopCameraProcessing(); // Call this in dispose

// To read a barcode from an XFile, a path, a URL or raw bytes.
// Every method takes a DecodeParams; the defaults are a good starting point.
XFile xFile = XFile('Your image path');
Code resultFromXFile = await zx.readBarcodeImagePath(xFile, DecodeParams());

String path = 'Your local image path';
Code resultFromPath = await zx.readBarcodeImagePathString(path, DecodeParams());

String url = 'Your remote image url';
Code resultFromUrl = await zx.readBarcodeImageUrl(url, DecodeParams());

// `readBarcode` is synchronous and takes already-decoded pixels, so the image
// dimensions and pixel format have to be described explicitly.
Uint8List bytes = Uint8List.fromList(yourImageBytes);
Code resultFromBytes = zx.readBarcode(
    bytes,
    DecodeParams(imageFormat: ImageFormat.rgb, width: width, height: height),
);

// The reading methods never throw: a failure is reported on the result.
if (!resultFromPath.isValid) {
    debugPrint(resultFromPath.error);
}

// Every method above has a `readBarcodes...` counterpart that returns `Codes`
// with every symbol found in the image.
Codes allCodes = await zx.readBarcodesImagePath(xFile, DecodeParams());
To create barcode
import 'dart:typed_data';

import 'package:flutter_zxing/flutter_zxing.dart';

// Use WriterWidget to quickly create barcode
@override
Widget build(BuildContext context) {
  return Scaffold(
    body: WriterWidget(
      onSuccess: (result, bytes) {
        // Do something with the result
      },
      onError: (error) {
        // Do something with the error
      },
    ),
  );
}

// Or use FlutterZxing to create barcode directly
final Encode result = zx.encodeBarcode(
    contents: 'Text to encode',
    params: EncodeParams(
        format: Format.qrCode,
        width: 120,
        height: 120,
        margin: 10,
        eccLevel: EccLevel.low,
    ),
);
if (result.isValid && result.data != null) {
    // `result.data` holds one byte per pixel. Always render it with the size
    // the encoder reports: when the symbol does not fit the requested box,
    // zxing enlarges it, so `result.width`/`result.height` may differ from the
    // width and height that were asked for.
    final Uint8List encodedBytes = pngFromBytes(
        result.data!,
        result.width!,
        result.height!,
    );
    // use encodedBytes as you wish, for example Image.memory(encodedBytes)
} else {
    debugPrint(result.error);
}

License

MIT License. See LICENSE.

카테고리

의존성

의존성 목록 4 개

소스 저장소

이 패키지를 사용하는 프로젝트