Scanwedge is a Flutter plugin for Android devices that have hardware barcode scanner functionality.
Currently it supports Honeywell, Datalogic, Newland and Zebra devices.
This will only work for these Android devices, but it will not have any negative impact on other devices.
Code inspired by sample code from Honeywell, Zebra and ofcourse the Flutter community.
Thanks to @M-Ahal for adding Newland support.
Command | Description |
---|---|
createProfile | Created a new scanner profile, input is a ProfileModel |
disableScanner | Disables the scanner, for Honeywell devices it will still "read" but not send the result |
enableScanner | Enables the scanner |
initialize | Requests and initialize the Scanwedge, this must be called before using the Scanwedge |
isDeviceSupported | Returns true if it's a supported device, if this is false the other methods will be ignored when called |
manufacturer | Returns the manufacturer of the device |
modelName | Returns the modelname of the device |
osVersion | Returns the OS version on the device |
packageName | Returns the package name of the host application, this will also be used as default package name in [ScanProfile] if not set |
productName | Returns the productname of the device |
supportedDevice | Returns a [SupportedDevice] object with the information if the device is supported and the type |
stream | Request a stream of barcode scans, returns barcodes scanned with the [ScanResult] |
toggleScanning | Triggers a scan (SOFTTRIGGER) |
getBatteryStatus | Returns the battery status of the device. This function might be removed from this package in the future |
final _scanwedgePlugin = await Scanwedge.initialize();
//Creating a new profile with the name TestProfile that only reads CODE128 barcodes with the length between 5 and 10
_scanwedgePlugin.createProfile(ProfileModel(profileName: 'TestProfile', enabledBarcodes: [BarcodeTypes.code128.create(minLength: 5, maxLength: 10)]))
This class sets the scan profile
ProfileModel({
required String profileName, // The name of the profile
List<BarcodeConfig>? enabledBarcodes, // A list of [BarcodeConfig] that will be enabled in the profile
bool keepDefaults = true, // If true, the default enabled barcodes from the hardware used will be kept (together with [enabledBarcodes])
});
This class is a extended version of [ProfileModel] that adds more configuration options if the device is a Zebra device (will also work with other devices but then ignore the extra configuration) The extra options are: [aimType] - The type of aim, see [AimTypes], default is [AimType.trigger] [enableKeyStroke] - Enable sending scans to keyboard buffer (this is default set to false)
This currently have no extra configuration options, so should use [ProfileModel] instead
This class is returned when calling [supportedDevice]
enum SupportedDevice { zebra, honeywell, invalid }
Possibility to set configuration related to barcode scanning.
BarcodeConfig({
required BarcodeTypes barcodeType, // The [BarcodeTypes]
int? minLength, // The minimum length of the barcode, ignored if null. Not all barcode types support this so check hardware vendor for the appropriate barcode type
int? maxLength, // The maximum length of the barcode, ignored if null. Not all barcode types support this so check hardware vendor for the appropriate barcode type
});
To receive the scan events you can listen to the Stream
final _scanwedgePlugin=ScanwedgeChannel();
@override build()=>Card(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('Last scan:'),
StreamBuilder(
stream: _scanwedgePlugin.stream,
builder: ((context, snapshot) => Text(
snapshot.hasData
? snapshot.data.toString()
: snapshot.hasError
? snapshot.error.toString()
: 'Scan something',
style: Theme.of(context).textTheme.titleMedium,
))),
]
)
);
This is a enum that sets the aim type for the scanner on Zebra devices
trigger
timedHold
timedRelease
pressAndRelease
presentation
continuousRead
pressAndSustain
pressAndContinue
timedContinuous
aztec,
codabar,
code128,
code39,
code93,
datamatrix,
ean128,
ean13,
ean8,
gs1DataBar,
gs1DataBarExpanded,
i2of5,
mailmark,
maxicode,
pdf417,
qrCode,
upca,
upce0,
manual, // Used for marking a barcode as manual input
unknown // This is when it receives a unknown barcode, then check the [ScanResult.hardwareBarcodeType] for the actual barcode type