iMin Hardware Plugin

pub package GitHub

English | δΈ­ζ–‡ζ–‡ζ‘£

A comprehensive Flutter plugin for controlling iMin POS device hardware features.

Features

Module Description
πŸ“Ί Display Secondary display control
πŸ’° Cashbox Cash drawer control
πŸ’‘ Light LED indicator lights
πŸ’³ NFC NFC card reading
πŸ“· Scanner Barcode/QR code scanner
πŸ’³ MSR Magnetic stripe reader
βš–οΈ Scale Electronic scale (Android 13+)
πŸ”Œ Serial Serial port communication
πŸ”’ Segment Digital tube display
πŸͺŸ Floating Window Overlay window
πŸ“Έ Camera Camera scanning (ZXing + ML Kit)
πŸ“‘ RFID RFID tag operations
πŸ“± Device Device information

Supported Devices

iMin D4, M2-Pro, Swan, Swift, Crane, Lark, Falcon series

Installation

From pub.dev

dependencies:
  imin_hardware_plugin: ^1.0.0

From Git

dependencies:
  imin_hardware_plugin:
    git:
      url: https://github.com/iminsoftware/FlutterApiTest.git
      ref: main

Then run:

flutter pub get

Quick Start

import 'package:imin_hardware_plugin/imin_hardware_plugin.dart';

// Camera scan (single barcode)
final result = await CameraScanApi.scanAll();
print('Code: ${result['code']}, Format: ${result['format']}');

// Camera scan (multi-barcode / multi-angle, ML Kit)
final results = await CameraScanApi.scanMulti();
for (final item in results) {
  print('Code: ${item['code']}, Format: ${item['format']}');
}

// Check ML Kit availability
final mlkitAvailable = await CameraScanApi.isMLKitAvailable();

// Hardware scanner (built-in scanner head)
IminScanner.scanStream.listen((event) => print('Scanned: ${event.data}'));
await IminScanner.startListening();

// NFC
IminNfc.tagStream.listen((tag) => print('NFC: ${tag['id']}'));

// Electronic Scale (Android 13+)
await IminScaleNew.connectService();
await IminScaleNew.getData();

Camera Scan API

Single Scan (ZXing)

// Quick scan with default formats
String code = await CameraScanApi.scanQuick();

// Scan QR code only
String code = await CameraScanApi.scanQRCode();

// Scan all formats with full result
Map<String, dynamic> result = await CameraScanApi.scanAll();

// Custom scan
Map<String, dynamic> result = await CameraScanApi.scan(
  formats: ['QR_CODE', 'EAN_13', 'CODE_128'],
  useFlash: true,
  beepEnabled: true,
  timeout: 10000,
);

Multi Scan (ML Kit + ZXing)

Supports multi-barcode recognition and any-angle scanning. Auto-fallback to ZXing if ML Kit is unavailable.

// Default multi scan
List<Map<String, dynamic>> results = await CameraScanApi.scanMulti();

// Multi-angle scan (single barcode, any orientation)
final results = await CameraScanApi.scanMulti(const MultiScanOptions(
  supportMultiAngle: true,
  supportMultiBarcode: false,
));

// Full custom configuration
final results = await CameraScanApi.scanMulti(const MultiScanOptions(
  formats: ['QR_CODE', 'EAN_13', 'CODE_128'],
  supportMultiBarcode: true,
  supportMultiAngle: true,
  decodeEngine: DecodeEngine.mlkit,  // 0=ZXing, 1=MLKit
  fullAreaScan: true,
  areaRectRatio: 0.9,
  useFlash: false,
  beepEnabled: true,
  timeout: 30000,
));

// Check ML Kit availability
bool available = await CameraScanApi.isMLKitAvailable();

Documentation

Complete API Guides

Example App

See example directory for complete demo application with all hardware features.

Requirements

  • Flutter >=3.3.0
  • Dart >=3.0.0
  • Android minSdkVersion 21
  • iMin POS device

Permissions

Add to your app's AndroidManifest.xml as needed:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />

Support

License

BSD-3-Clause License - see LICENSE

Libraries

imin_hardware_plugin
iMin Hardware Plugin