| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import 'dart:async';
- import 'package:flutter/services.dart';
- /// PDA服务类,用于处理扫描和RFID功能
- class PdaService {
- static const MethodChannel _methodChannel = MethodChannel(
- 'com.vber.chicken_farm/pda_scanner',
- );
- static const EventChannel _eventChannel = EventChannel(
- 'com.vber.chicken_farm/pda_scanner_event',
- );
- static final PdaService _instance = PdaService._internal();
- factory PdaService() => _instance;
- PdaService._internal();
- StreamSubscription? _scanSubscription;
- final StreamController<String?> _scanResultController =
- StreamController<String?>.broadcast();
- /// 扫描条形码/二维码
- Future<void> scanBarcode() async {
- try {
- await _methodChannel.invokeMethod('scanBarcode');
- } on PlatformException catch (e) {
- print("扫描失败: ${e.message}");
- }
- }
- /// 读取RFID
- Future<String?> readRfid() async {
- try {
- final String? rfid = await _methodChannel.invokeMethod('readRfid');
- return rfid;
- } on PlatformException catch (e) {
- print("读取RFID失败: ${e.message}");
- return null;
- }
- }
- /// 写入RFID
- Future<String?> writeRfid(String data) async {
- try {
- final String? result = await _methodChannel.invokeMethod('writeRfid', {
- 'data': data,
- });
- return result;
- } on PlatformException catch (e) {
- print("写入RFID失败: ${e.message}");
- return null;
- }
- }
- /// 监听扫描结果
- Stream<String?> get scanResults => _scanResultController.stream;
- /// 开始监听扫描结果
- void startListeningScanResults() {
- _scanSubscription = _eventChannel.receiveBroadcastStream().listen(
- (dynamic result) {
- _scanResultController.sink.add(result as String?);
- },
- onError: (dynamic error) {
- print("接收扫描结果出错: $error");
- _scanResultController.sink.add(null);
- },
- );
- }
- /// 停止监听扫描结果
- void stopListeningScanResults() {
- _scanSubscription?.cancel();
- _scanSubscription = null;
- }
- /// 释放资源
- void dispose() {
- stopListeningScanResults();
- _scanResultController.close();
- }
- }
|