Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yushulx/flutter_barcode_sdk

Build barcode QR detection apps for Windows, Linux, macOS, Android, iOS and web.
https://github.com/yushulx/flutter_barcode_sdk

android barcode datamatrix flutter ios linux macos pdf417 qrcode web windows

Last synced: 5 days ago
JSON representation

Build barcode QR detection apps for Windows, Linux, macOS, Android, iOS and web.

Awesome Lists containing this project

README

        

# flutter_barcode_sdk
![pub.dev](https://img.shields.io/pub/v/flutter_barcode_sdk.svg)

The Flutter Barcode QR Reading SDK is a wrapper for the [Dynamsoft Barcode Reader SDK v9.x](https://www.dynamsoft.com/barcode-reader/overview/). It supports multiple platforms, including **Android**, **iOS**, **Web**, **Windows**, **Linux** and **macOS**, and can read various barcode types such as linear barcode, QR Code, DataMatrix, MaxiCode, PDF417, etc. This SDK encapsulates the low-level decoding functions of the Dynamsoft Barcode Reader, enabling both file and image buffer decoding. The project is actively maintained by community contributors.

For live camera scenarios, it is recommended to use the official [Dynamsoft Capture Vision Flutter Edition](https://pub.dev/packages/dynamsoft_capture_vision_flutter), as it offers better performance than combining the [Flutter camera plugin](https://pub.dev/packages/camera) with the Flutter Barcode SDK.

## Getting a License Key for Dynamsoft Barcode Reader
[![](https://img.shields.io/badge/Get-30--day%20FREE%20Trial-blue)](https://www.dynamsoft.com/customer/license/trialLicense/?product=dcv&package=cross-platform)

## Supported Platforms
- **Android**
- **iOS**
- **Windows**
- **Linux**
- **macOS**
- **Web**

## Supported Barcode Symbologies
- Linear Barcodes (1D)
- Code 39 (including Code 39 Extended)
- Code 93
- Code 128
- Codabar
- Interleaved 2 of 5
- EAN-8
- EAN-13
- UPC-A
- UPC-E
- Industrial 2 of 5

- 2D Barcodes
- QR Code (including Micro QR Code and Model 1)
- Data Matrix
- PDF417 (including Micro PDF417)
- Aztec Code
- MaxiCode (mode 2-5)
- DotCode

- Patch Code
- GS1 Composite Code
- GS1 DataBar
- Omnidirectional,
- Truncated, Stacked, Stacked
- Omnidirectional, Limited,
- Expanded, Expanded Stacked

- Postal Codes
- USPS Intelligent Mail
- Postnet
- Planet
- Australian Post
- UK Royal Mail

## Build Configuration

### Android
Change the minimum Android sdk version to 21 (or higher) in your `android/app/build.gradle` file.

```
minSdkVersion 21
```

### iOS
Add the keys to `ios/Runner/Info.plist` to make camera work:

```
NSCameraUsageDescription
Can I use the camera please?
NSMicrophoneUsageDescription
Can I use the mic please?
```

### Desktop

**Windows & Linux**

Install `CMake` and `platform-specific C++ compiler`.

**macOS**

Install `Xcode`.

To make the demo app work on macOS:
- Disable `com.apple.security.app-sandbox` and enable `com.apple.security.files.user-selected.read-write` in `example/macos/Runner/DebugProfile.entitlements`:

```xml




com.apple.security.app-sandbox

com.apple.security.cs.allow-jit

com.apple.security.network.server

com.apple.security.files.user-selected.read-write



```

- Import `DynamsoftBarcodeReader.h` to the bridging header file.

![macOS bridging header](https://www.dynamsoft.com/codepool/img/2021/flutter/macos-bridging-barcode-header.png)

### Web
In `index.html`, include:

```html

```

## API Compatibility
| Methods | Android | iOS | Windows | Linux | macOS | Web|
| ----------- | ----------- | ----------- | ----------- |----------- |----------- |----------- |
| `Future setLicense(String license) async` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: |
| `Future> decodeFile(String filename) async` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: |
| `Future> decodeImageBuffer(Uint8List bytes, int width, int height, int stride, int format) async` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: |
| `Future setBarcodeFormats(int formats) async` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: |
| `Future getParameters() async` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: |
| `Future setParameters(String params)` async | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: |
| `Future init()` async | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |:heavy_check_mark: | :heavy_check_mark: |

## Usage
- Initialize Flutter barcode SDK and set license key:

```dart
_barcodeReader = FlutterBarcodeSdk();
await _barcodeReader.setLicense('LICENSE-KEY');
await _barcodeReader.init();
```

- Read barcodes from an image file:

```dart
List results = await _barcodeReader.decodeFile(image-path);
```

- Read barcodes from an image buffer:

```dart
import 'dart:ui' as ui;
Uint8List fileBytes = await file.readAsBytes();
ui.Image image = await decodeImageFromList(fileBytes);

ByteData byteData = await image.toByteData(
format: ui.ImageByteFormat.rawRgba);
List results =
await _barcodeReader.decodeImageBuffer(
byteData.buffer.asUint8List(),
image.width,
image.height,
byteData.lengthInBytes ~/ image.height,
ImagePixelFormat.IPF_ARGB_8888.index);
```

- Set barcode formats:

```dart
await _barcodeReader.setBarcodeFormats(BarcodeFormat.ALL);
```

- Get current barcode detection parameters:

```dart
String params = await _barcodeReader.getParameters();
// Convert parameters to a JSON object.
dynamic obj = jsonDecode(params);
// Modify parameters.
if (obj['ImageParameter'] != null) {
obj['ImageParameter']['DeblurLevel'] = 5;
} else
obj['deblurLevel'] = 5;
```

- Set barcode detection parameters:

```dart
int ret = await _barcodeReader.setParameters(json.encode(obj));
```

## Try Barcode Decoding Example

### Mobile
The example allows users to scan barcode Qr code via the camera video stream and read barcode QRCode by a static picture.

```
cd example
flutter run -d
```

Video Scan

![flutter barcode scanner](https://www.dynamsoft.com/codepool/img/2021/flutter-barcode-scanner-camera.gif)

Picture Scan

![flutter barcode reader](https://www.dynamsoft.com/codepool/img/2021/flutter-picture-barcode-scan.jpg)

For building Android release app, configure `build.gradle` and corresponding proguard file:

**build.gradle**
```
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

```

**proguard-rules.pro**

```
-keep class com.dynamsoft.dbr.** { *; }
```

### Windows, Linux and macOS Desktop
Input a valid image path for barcode decoding.

![flutter windows barcode reader](https://www.dynamsoft.com/codepool/img/2021/flutter-desktop-barcode-reader.png)

```
cd example
# Windows
flutter run -d windows

# Linux
flutter run -d linux

# macOS
flutter run -d macos
```

### Web Browser

```
cd example
flutter run -d chrome
```

![flutter web barcode reader](https://www.dynamsoft.com/codepool/img/2021/flutter-web-barcode-sdk.png)