Ensemble QR Scanner

Lightweight QR Code and Barcode scanner module for Ensemble Framework.

Quick Setup

cd starter
dart run scripts/modules/enable_qr_code.dart
flutter pub get
flutter run

Manual Installation

  1. Add dependency to pubspec.yaml:
dependencies:
  ensemble_qr_scanner:
    git:
      url: https://github.com/EnsembleUI/ensemble.git
      ref: main
      path: modules/qr_scanner
  1. Update lib/generated/ensemble_modules.dart:
// Add import
import 'package:ensemble_qr_scanner/qr_code_scanner.dart';

// Set flag
static const useCamera = true;

// Register (inside useCamera block)
GetIt.I.registerSingleton<EnsembleQRCodeScanner>(
    EnsembleQRCodeScannerImpl.build(EnsembleQRCodeScannerController()));
  1. Add permissions:

Android (AndroidManifest.xml):

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

iOS (Info.plist):

<key>NSCameraUsageDescription</key>
<string>Camera permission is required for QR code scanning</string>

Usage

QRCodeScanner:
  id: scanner
  initialCamera: back
  formatsAllowed: [qrcode, barcode]
  cutOutHeight: 250
  cutOutWidth: 250
  cutOutBorderRadius: 12
  cutOutBorderColor: 0xFF00FF00
  onReceived: |
    //@code
    console.log("Scanned: " + event.data.data);

Properties

Property Type Default
initialCamera String (back/front) back
formatsAllowed Array (qrcode, barcode) [qrcode]
cutOutHeight Integer 200
cutOutWidth Integer 200
cutOutBorderRadius Integer 0
cutOutBorderColor Color red

Methods

  • flipCamera() - Switch front/back
  • toggleFlash() - Toggle flash
  • pauseCamera() - Pause scanning
  • resumeCamera() - Resume scanning

Events

onReceived:

{
  format: "qrCode",      // Format name
  data: "https://...",   // Decoded string
  rawBytes: [...]        // Raw bytes
}

onInitialized: Triggered when ready onPermissionSet: Triggered on permission change

Module Comparison

Feature qr_scanner camera face_camera
QR/Barcode
Photo/Video
Face detection
Size ~4KB ~400KB+ varies
Permissions Camera only Camera, Location, Mic Camera, Mic
Dependencies mobile_scanner geolocator, sensors face detection models

Face detection was moved out of ensemble_camera into the standalone ensemble_face_camera module. Using faceDetection: enabled: true in openCamera now logs a warning and falls back to the standard camera.

When to Use

Use ensemble_qr_scanner:

  • Only need QR/barcode scanning
  • Want minimal app size
  • Don't need extra permissions

Use ensemble_camera:

  • Need photo/video capture
  • Need sensor/location features
  • (includes QR via re-export)

Use ensemble_face_camera:

  • Need real-time face detection and openFaceCamera

Migration from Camera Module

Before:

dependencies:
  ensemble_camera: ^0.0.1

After:

dependencies:
  ensemble_qr_scanner: ^0.0.1

Code remains the same - just update dependency!

Supported Formats

  • QR Code
  • Code 128, Code 39, Code 93
  • EAN-8, EAN-13
  • UPC-A, UPC-E
  • Codabar

License

See LICENSE file.