pda_service.dart 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import 'dart:async';
  2. import 'package:flutter/services.dart';
  3. /// PDA服务类,用于处理扫描和RFID功能
  4. class PdaService {
  5. static const MethodChannel _methodChannel = MethodChannel(
  6. 'com.vber.chicken_farm/pda_scanner',
  7. );
  8. static const EventChannel _eventChannel = EventChannel(
  9. 'com.vber.chicken_farm/pda_scanner_event',
  10. );
  11. static final PdaService _instance = PdaService._internal();
  12. factory PdaService() => _instance;
  13. PdaService._internal();
  14. StreamSubscription? _scanSubscription;
  15. final StreamController<String?> _scanResultController =
  16. StreamController<String?>.broadcast();
  17. /// 扫描条形码/二维码
  18. Future<void> scanBarcode() async {
  19. try {
  20. await _methodChannel.invokeMethod('scanBarcode');
  21. } on PlatformException catch (e) {
  22. print("扫描失败: ${e.message}");
  23. }
  24. }
  25. /// 读取RFID
  26. Future<String?> readRfid() async {
  27. try {
  28. final String? rfid = await _methodChannel.invokeMethod('readRfid');
  29. return rfid;
  30. } on PlatformException catch (e) {
  31. print("读取RFID失败: ${e.message}");
  32. return null;
  33. }
  34. }
  35. /// 写入RFID
  36. Future<String?> writeRfid(String data) async {
  37. try {
  38. final String? result = await _methodChannel.invokeMethod('writeRfid', {
  39. 'data': data,
  40. });
  41. return result;
  42. } on PlatformException catch (e) {
  43. print("写入RFID失败: ${e.message}");
  44. return null;
  45. }
  46. }
  47. /// 监听扫描结果
  48. Stream<String?> get scanResults => _scanResultController.stream;
  49. /// 开始监听扫描结果
  50. void startListeningScanResults() {
  51. _scanSubscription = _eventChannel.receiveBroadcastStream().listen(
  52. (dynamic result) {
  53. _scanResultController.sink.add(result as String?);
  54. },
  55. onError: (dynamic error) {
  56. print("接收扫描结果出错: $error");
  57. _scanResultController.sink.add(null);
  58. },
  59. );
  60. }
  61. /// 停止监听扫描结果
  62. void stopListeningScanResults() {
  63. _scanSubscription?.cancel();
  64. _scanSubscription = null;
  65. }
  66. /// 释放资源
  67. void dispose() {
  68. stopListeningScanResults();
  69. _scanResultController.close();
  70. }
  71. }