JustScanner
A high-performance QR and barcode scanner package for Flutter with support for multiple formats and optimized for lower Android versions.
Features
- 🚀 High-performance scanning using ML Kit (Android) and Vision (iOS)
- 📱 Support for Android API 21+ with legacy camera support
- 🔍 Multiple barcode formats support (QR, EAN, UPC, Code128, etc.)
- 📸 Real-time camera preview with scan area overlay
- 🔦 Torch/flashlight control
- ⚡ Continuous and single-shot scanning modes
- 🎯 Configurable scan delay and frame rate
- 📊 Barcode position and corner detection
- 🖼️ Image analysis from bytes
Supported Formats
- QR Code
- Aztec
- Data Matrix
- PDF417
- UPC-A / UPC-E
- EAN-8 / EAN-13
- Code 39 / Code 93 / Code 128
- ITF
- Codabar
Getting started
Add this to your package's pubspec.yaml file:
dependencies:
just_scanner:
path: packages/just_scanner
Platform Setup
Android
Add camera permissions to your AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
iOS
Add camera usage description to your Info.plist:
<key>NSCameraUsageDescription</key>
<string>Camera access is required for scanning barcodes</string>
Usage
import 'package:flutter/material.dart';
import 'package:just_scanner/just_scanner.dart';
class ScannerPage extends StatefulWidget {
@override
_ScannerPageState createState() => _ScannerPageState();
}
class _ScannerPageState extends State<ScannerPage> {
late JustScanner scanner;
String? scannedCode;
@override
void initState() {
super.initState();
scanner = JustScanner(
config: ScannerConfig(
formats: [BarcodeFormat.qrCode],
enableHapticFeedback: true,
),
);
scanner.listen((result) {
setState(() {
scannedCode = result.code;
});
});
}
@override
void dispose() {
scanner.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: ScannerView(
config: scanner.config,
onScannerReady: () async {
await scanner.initialize();
await scanner.startScanning();
},
),
);
}
}
Additional information
For more examples and advanced usage, check the documentation.