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 _scanResultController = StreamController.broadcast(); /// 扫描条形码/二维码 Future scanBarcode() async { try { await _methodChannel.invokeMethod('scanBarcode'); } on PlatformException catch (e) { print("扫描失败: ${e.message}"); } } /// 读取RFID Future readRfid() async { try { final String? rfid = await _methodChannel.invokeMethod('readRfid'); return rfid; } on PlatformException catch (e) { print("读取RFID失败: ${e.message}"); return null; } } /// 写入RFID Future 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 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(); } }