33 lines
854 B
Dart
33 lines
854 B
Dart
import 'dart:async';
|
|
import 'package:flutter/services.dart';
|
|
|
|
class ScanResult {
|
|
final String barcode;
|
|
final String codeType;
|
|
|
|
ScanResult({required this.barcode, required this.codeType});
|
|
}
|
|
|
|
class ScannerService {
|
|
static const _eventChannel = EventChannel('com.example.pad_scanner/scan');
|
|
static Stream<ScanResult>? _sharedScanStream;
|
|
|
|
Stream<ScanResult> get scanResults {
|
|
_sharedScanStream ??= _createSharedScanStream();
|
|
return _sharedScanStream!;
|
|
}
|
|
|
|
static Stream<ScanResult> _createSharedScanStream() {
|
|
return _eventChannel
|
|
.receiveBroadcastStream()
|
|
.map((event) => event as Map)
|
|
.map(
|
|
(event) => ScanResult(
|
|
barcode: event['barcode'] as String? ?? '',
|
|
codeType: event['codeType'] as String? ?? 'UNKNOWN',
|
|
),
|
|
)
|
|
.asBroadcastStream();
|
|
}
|
|
}
|