zap_scan 1.1.2 copy "zap_scan: ^1.1.2" to clipboard
zap_scan: ^1.1.2 copied to clipboard

Flutter scanning package for cards, barcodes, and IATA boarding passes using on-device OCR and EMV NFC.

Zap Scan ⚡ #

Pub Version License: MIT

Zap Scan is a package for Flutter that extracts data from cards, barcodes, and boarding passes. It leverages native, on-device OCR and EMV NFC to provide a "bulletproof" scanning experience.

Features #

  • 🃏 Card Scanning: Robust OCR for 14- to 16-digit payment cards. Handles horizontal, grid (2×2), and vertical layouts.
  • 🌫️ Image Enhancement: Specialized strategies (Sobel, Otsu, CLAHE) to handle glare, low light, and metallic/embossed cards.
  • 🛫 Boarding Pass Parsing: Full IATA BCBP support to extract PNR, Seat, Flight Number, and more.
  • 💳 EMV NFC: Contactless card reading (PAN & Expiry) for Visa, Mastercard, Amex, RuPay, and Diners.
  • 📊 Stability Consensus: Built-in "consensus mechanism" that requires multiple identical frames before confirming a result, preventing "fluttery" OCR misreads.

Installation #

Add zap_scan to your pubspec.yaml:

dependencies:
  zap_scan: ^1.0.0

Setup #

Android #

Set minSdkVersion to 21 in android/app/build.gradle.

iOS #

Set your iOS Deployment Target to 16.0.

Note

Review the PRODUCTION_CHECKLIST.md for a complete list of required permissions and configurations.

Usage #

Camera-based Scanning (OCR & Barcodes) #

The ZapScanWidget provides the camera preview, while the UniversalScannerController manages the detection logic.

import 'package:zap_scan/zap_scan.dart';

// 1. Initialize the controller
final controller = UniversalScannerController(
  onResultScanned: (result) {
    if (result is ZapCardResult) {
      print('Card Number: ${result.cardNumber}');
    } else if (result is FlightTicketResult) {
       print('Flight: ${result.flightNumber} via ${result.pnr}');
    }
  },
);

// 2. Add the widget to your build
@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ZapScanWidget(
      controller: controller,
      loader: CircularProgressIndicator(),
    ),
  );
}

NFC Card Reading #

NFC is handled via the static EmvNfcService.

import 'package:zap_scan/zap_scan.dart';

try {
  final card = await EmvNfcService.scanCard();
  if (card != null) {
    print('NFC Card: ${card.cardNumber}');
  }
} catch (e) {
  print('NFC Error: $e');
}

Advanced Logic: Embossed & Metallic Cards #

Zap Scan is unique for its Strategy Rotation. If a card isn't detected within a few frames, the engine automatically cycles through image enhancement filters (e.g., inverting colors, sharpening edges, or local contrast amplification). This is particularly effective for "silver-on-silver" embossed cards that traditional OCR often fails to pick up.

License #

This project is licensed under the MIT License - see the LICENSE file for details.

0
likes
150
points
147
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Flutter scanning package for cards, barcodes, and IATA boarding passes using on-device OCR and EMV NFC.

Repository (GitHub)
View/report issues

Topics

#scanner #ocr #nfc #card #barcode

License

MIT (license)

Dependencies

camera, flutter, flutter_web_plugins, google_mlkit_commons, nfc_manager

More

Packages that depend on zap_scan

Packages that implement zap_scan