Flutter Barcode Scanner SDK
High-throughput barcode and QR scanner SDK for Flutter apps.
The package provides two native scanning modes:
FlutterBarcodeScanner.scan(config)opens a full-screen scanner and returns one result.FlutterBarcodeScannerViewembeds the native scanner in a Flutter layout and emits results through a controller-friendly widget API.
Android uses CameraX with ML Kit Barcode Scanning. iOS uses AVFoundation. The iOS plugin supports Swift Package Manager and CocoaPods.
Contents
- Platform Support
- Installation
- Permissions
- Full-Screen Scanner
- Embedded Scanner
- Format Presets
- Example App
- API Reference
- Compatibility
- Troubleshooting
- License
Platform Support
| Platform | Minimum | Native engine |
|---|---|---|
| Android | API 24 | CameraX + ML Kit Barcode Scanning |
| iOS | 15.0 | AVFoundation metadata scanning |
| Flutter | 3.44.0 | AGP 9 / Gradle 9 Android plugin build |
| Dart | 3.12.0 | Sound null safety |
Installation
dependencies:
flutter_barcode_scanner_sdk: ^0.2.0
Then run:
flutter pub get
Permissions
Android
The plugin declares android.permission.CAMERA. If your app has a custom manifest merge setup, confirm that the merged app manifest includes:
<uses-permission android:name="android.permission.CAMERA" />
iOS
Add a camera usage description to ios/Runner/Info.plist:
<key>NSCameraUsageDescription</key>
<string>This app scans barcodes with the camera.</string>
Full-Screen Scanner
final result = await FlutterBarcodeScanner.scan(
const FlutterBarcodeScannerConfig(
allowedFormats: FlutterBarcodeScannerFormats.common,
strings: FlutterBarcodeScannerStrings(title: 'Scan ticket'),
),
);
if (result?.isBarcode == true) {
debugPrint('Scanned ${result!.format.name}: ${result.rawValue}');
}
Embedded Scanner
final controller = FlutterBarcodeScannerController();
FlutterBarcodeScannerView(
controller: controller,
config: const FlutterBarcodeScannerConfig(
allowedFormats: FlutterBarcodeScannerFormats.qrOnly,
scanWindow: FlutterBarcodeScannerScanWindow(
enabled: true,
widthFactor: 0.58,
heightFactor: 0.58,
),
),
widgetConfig: const FlutterBarcodeScannerWidgetConfig(
autoRequestCameraPermission: true,
freezePreviewWhenPaused: true,
showPauseResumeButton: true,
),
autoStart: true,
autoPauseOnScan: true,
onScan: (result) {
if (result.isBarcode) {
// Process the result, then resume when ready for another scan.
controller.resumeDetection();
}
},
);
Controller actions:
startCamera()andstopCamera()pauseDetection()andresumeDetection()toggleFlash([bool? enabled])switchCamera([BarcodeCameraLens? lens])updateConfig(config)dispose()
Format Presets
Use FlutterBarcodeScannerFormats for common format groups:
const FlutterBarcodeScannerConfig(
allowedFormats: FlutterBarcodeScannerFormats.twoDimensional,
);
Available presets include all, common, oneDimensional, twoDimensional, and qrOnly.
Example App
The bundled example app demonstrates:
- Full-screen and embedded scanner modes
- Scan-window and whole-preview detection
- RTL/LTR strings
- Flash and camera switching
- Auto-start, auto-pause, pause/resume, and freeze-preview behavior
- App bar, status bar, overlay, and format preset options
Run it with:
cd example
flutter run
API Reference
See API_REFERENCE.md for tables covering all public configuration fields, defaults, result fields, controller methods, and supported barcode formats.
Generated Dart API docs are available on pub.dev after publication.
Compatibility
See COMPATIBILITY.md for supported Flutter, Android, iOS, SwiftPM/CocoaPods, dependency-update, and API-compatibility policies.
Troubleshooting
| Symptom | Check |
|---|---|
| Permission screen does not appear | Confirm camera permission is in the Android manifest or NSCameraUsageDescription is in Info.plist. |
| Embedded scanner stays black | Ensure the widget has non-zero size and the controller has not been disposed. |
| No barcode is detected | Try scanWindow.enabled = false, verify lighting/focus, and restrict allowedFormats only when the expected format is known. |
| iOS build integration issue | Use Flutter 3.44 or newer and keep Swift Package Manager enabled; CocoaPods remains supported through the podspec. |
License
BSD 3. See LICENSE.
Libraries
- flutter_barcode_scanner_sdk
- A native barcode and QR scanner plugin for Flutter applications.