# shirisharyal/zxing_barcode_scanner architecture

> Architecture diagram of the GitHub repository shirisharyal/zxing_barcode_scanner, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/shirisharyal/zxing_barcode_scanner
- Repository: https://github.com/shirisharyal/zxing_barcode_scanner

## Overview

ZXing Barcode Scanner is a Flutter plugin that scans camera frames on Android and iOS with ZXing-cpp, returning decoded barcode text and formats to the Flutter app. The main workflow configures a scanner platform view, obtains camera frames, decodes them, and dispatches results or camera errors through Pigeon to Dart callbacks. Dart-facing controls also start, stop, dispose, and toggle the flash. The README documents resolution and ZXing decoding options; native implementation excerpts are partial, so unverified internal wiring is omitted.

Main entry points: [`android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ScannerView.kt`](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ScannerView.kt) (Scanner View), [`ios/Classes/ZxingBarcodeScannerView.swift`](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ZxingBarcodeScannerView.swift) (Scanner View), [`lib/generated/zxing_barcode_scanner_api.g.dart`](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/generated/zxing_barcode_scanner_api.g.dart) (Dart Messages), [`lib/src/zxing_barcode_scanner.dart`](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/src/zxing_barcode_scanner.dart) (Scanner API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dart["Flutter API"]
  node_dart_api["Scanner API"]
  node_dart_config["Scan Config"]
  node_dart_entry["Public Entry"]
end

subgraph group_bridge["Platform Bridge"]
  node_dart_pigeon["Dart Messages"]
end

subgraph group_android["Android Scanner"]
  node_android_plugin["Plugin Factory"]
  node_android_view["Scanner View<br/>[ScannerView.kt]"]
  node_android_config["Scan Config<br/>[ScannerConfig.kt]"]
  node_android_pigeon["Native Messages"]
  node_android_camera["CameraX"]
  node_android_zxing["ZXing Reader"]
end

subgraph group_ios["iOS Scanner"]
  node_ios_plugin["Plugin Factory"]
  node_ios_view["Scanner View"]
  node_ios_config["Scan Config"]
  node_ios_pigeon["Native Messages"]
  node_ios_camera["AVFoundation"]
  node_ios_zxing["ZXing Reader"]
end

node_app(("Flutter App"))

node_app -->|"uses"| node_dart_entry
node_dart_entry -->|"exposes"| node_dart_api
node_dart_api -->|"configures"| node_dart_config
node_dart_api -->|"sends controls"| node_dart_pigeon
node_dart_pigeon -->|"platform messages"| node_android_pigeon
node_dart_pigeon -->|"platform messages"| node_ios_pigeon
node_android_plugin -->|"creates view"| node_android_view
node_android_view -->|"reads config"| node_android_config
node_android_view -->|"registers handlers"| node_android_pigeon
node_android_view -->|"captures frames"| node_android_camera
node_android_view -->|"decodes frames"| node_android_zxing
node_android_view -->|"dispatches results"| node_android_pigeon
node_android_pigeon -->|"returns results"| node_dart_pigeon
node_ios_plugin -->|"creates view"| node_ios_view
node_ios_plugin -->|"parses arguments"| node_ios_config
node_ios_view -->|"applies options"| node_ios_config
node_ios_view -->|"registers handlers"| node_ios_pigeon
node_ios_view -->|"captures frames"| node_ios_camera
node_ios_view -->|"decodes frames"| node_ios_zxing
node_ios_view -->|"dispatches results"| node_ios_pigeon
node_ios_pigeon -->|"returns results"| node_dart_pigeon
node_dart_pigeon -->|"delivers callbacks"| node_dart_api

click node_dart_api "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/src/zxing_barcode_scanner.dart"
click node_dart_config "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/src/scanner_config.dart"
click node_dart_entry "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/zxing_barcode_scanner.dart"
click node_dart_pigeon "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/generated/zxing_barcode_scanner_api.g.dart"
click node_android_plugin "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ZxingBarcodeScannerPlugin.kt"
click node_android_view "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ScannerView.kt"
click node_android_config "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ScannerConfig.kt"
click node_android_pigeon "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ZxingBarcodeScanner.kt"
click node_ios_plugin "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ZxingBarcodeScannerPlugin.swift"
click node_ios_view "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ZxingBarcodeScannerView.swift"
click node_ios_config "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ScannerConfig.swift"
click node_ios_pigeon "https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ZxingBarcodeScanner.swift"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dart_api,node_dart_config,node_dart_entry toneBlue
class node_dart_pigeon toneAmber
class node_android_plugin,node_android_view,node_android_config,node_android_pigeon,node_android_camera,node_android_zxing toneMint
class node_ios_plugin,node_ios_view,node_ios_config,node_ios_pigeon,node_ios_camera,node_ios_zxing toneRose
class node_app toneIndigo
```

## Components

### Flutter API

- [Scanner API](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/src/zxing_barcode_scanner.dart): `lib/src/zxing_barcode_scanner.dart`
- [Scan Config](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/src/scanner_config.dart): `lib/src/scanner_config.dart`
- [Public Entry](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/zxing_barcode_scanner.dart): `lib/zxing_barcode_scanner.dart`

### Platform Bridge

- [Dart Messages](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/lib/generated/zxing_barcode_scanner_api.g.dart): `lib/generated/zxing_barcode_scanner_api.g.dart`

### Android Scanner

- [Plugin Factory](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ZxingBarcodeScannerPlugin.kt): `android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ZxingBarcodeScannerPlugin.kt`
- [Scanner View](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ScannerView.kt): `android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ScannerView.kt`
- [Scan Config](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ScannerConfig.kt): `android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ScannerConfig.kt`
- [Native Messages](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ZxingBarcodeScanner.kt): `android/src/main/kotlin/com/shirisharyal/zxing_barcode_scanner/ZxingBarcodeScanner.kt`
- **CameraX**
- **ZXing Reader**

### iOS Scanner

- [Plugin Factory](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ZxingBarcodeScannerPlugin.swift): `ios/Classes/ZxingBarcodeScannerPlugin.swift`
- [Scanner View](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ZxingBarcodeScannerView.swift): `ios/Classes/ZxingBarcodeScannerView.swift`
- [Scan Config](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ScannerConfig.swift): `ios/Classes/ScannerConfig.swift`
- [Native Messages](https://github.com/shirisharyal/zxing_barcode_scanner/blob/main/ios/Classes/ZxingBarcodeScanner.swift): `ios/Classes/ZxingBarcodeScanner.swift`
- **AVFoundation**
- **ZXing Reader**

### Other components

- **Flutter App**

## Connections

- Flutter App → Public Entry: uses
- Public Entry → Scanner API: exposes
- Scanner API → Scan Config: configures
- Scanner API → Dart Messages: sends controls
- Dart Messages → Native Messages: platform messages
- Dart Messages → Native Messages: platform messages
- Plugin Factory → Scanner View: creates view
- Scanner View → Scan Config: reads config
- Scanner View → Native Messages: registers handlers
- Scanner View → CameraX: captures frames
- Scanner View → ZXing Reader: decodes frames
- Scanner View → Native Messages: dispatches results
- Native Messages → Dart Messages: returns results
- Plugin Factory → Scanner View: creates view
- Plugin Factory → Scan Config: parses arguments
- Scanner View → Scan Config: applies options
- Scanner View → Native Messages: registers handlers
- Scanner View → AVFoundation: captures frames
- Scanner View → ZXing Reader: decodes frames
- Scanner View → Native Messages: dispatches results
- Native Messages → Dart Messages: returns results
- Dart Messages → Scanner API: delivers callbacks
