smart_barcode_reader
A Flutter package for intelligently detecting and processing barcode scanner inputs, with support for formats like EAN-13. This package distinguishes scanner inputs from manual typing using adaptive speed and length validation, making it ideal for Point of Sale (POS) applications.
Features
- Intelligent Detection: Differentiates barcode scanner inputs from manual typing using adaptive thresholds for speed and input length.
- Barcode Format Support: Validates EAN-13 barcodes with checksum verification (more formats coming soon).
- User Feedback: Provides customizable feedback (e.g., SnackBar notifications) for invalid or slow inputs.
- High Tolerance: Handles slower scanners with configurable inter-key duration tolerance (default: 2.5x adaptive threshold).
- Lightweight: Pure Dart/Flutter implementation with minimal dependencies, perfect for POS and inventory applications.
Installation
Add smart_barcode_reader
to your pubspec.yaml
:
dependencies:
smart_barcode_reader: ^0.0.1
Tip: To access the latest features before official releases, use the
dev
branch:dependencies: smart_barcode_reader: git: url: https://github.com/MR-4-Code/smart_barcode_reader.git ref: dev
Then run:
flutter pub get
Usage
Below is a simple example of using SmartBarCodeReader
in a Flutter application to detect barcode inputs and display them.
import 'package:flutter/material.dart';
import 'package:smart_barcode_reader/smart_barcode_reader.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Barcode Scanner Demo')),
body: SmartBarCodeReaderWidget(
options: SmartBarCodeReaderOptions(
onBarcodeDetected: (barcode) {
print('Scanned barcode: $barcode');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Barcode: $barcode')),
);
},
),
child: Center(child: Text('Scan a barcode')),
),
),
);
}
}
Steps:
- Wrap your widget tree with
SmartBarCodeReaderWidget
. - Provide an
onBarcodeDetected
callback to handle detected barcodes. - Optionally, configure
SmartBarCodeReaderOptions
for custom settings.
Configuration
You can customize SmartBarCodeReader
with the following options in SmartBarCodeReaderOptions
:
onBarcodeDetected
: Callback for detected barcodes.minLength
: Minimum barcode length (default: 6).maxLength
: Maximum barcode length (default: 13 for EAN-13).maxInterKeyDurationMs
: Maximum time (ms) between key events (default: 20ms).validCharPattern
: RegExp for valid characters (default: numeric only).supportedFormats
: Set of supported barcode formats (default:{BarcodeFormat.ean13}
).tolerance
: Tolerance for slower scanners (default: 2.5).userFeedbackManager
: Custom feedback manager for user notifications.
Example with custom configuration:
SmartBarCodeReaderWidget(
options: SmartBarCodeReaderOptions(
onBarcodeDetected: (barcode) => print('Barcode: $barcode'),
minLength: 6,
maxLength: 13,
maxInterKeyDurationMs: 30,
tolerance: 2.5,
),
child: Center(child: Text('Scan a barcode')),
)
Contributing
Contributions are welcome! To contribute:
- Fork the repository.
- Create a new branch (
git checkout -b feature/your-feature
). - Make your changes and commit (
git commit -m 'Add your feature'
). - Push to the branch (
git push origin feature/your-feature
). - Open a Pull Request.
Please ensure your code follows the Flutter style guide and includes tests.
Issues
If you encounter any issues or have feature requests, please file them on the issue tracker.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contact
For questions or support, reach out via the GitHub repository or open an issue.
Built with 💙 for Flutter developers.
Author: MerDEV 2025