import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; class MeetingConnectController extends GetxController { RxString stateStr = '搜索中...'.obs; RxBool isRescan = false.obs; RxBool isImportedFiles = false.obs; late StreamSubscription> _scanResultsSubscription; late StreamSubscription _isScanningSubscription; BluetoothDevice? _device; @override void onInit() { super.onInit(); _scanResultsSubscription = FlutterBluePlus.scanResults.listen((results) { for (ScanResult item in results) { _handlerScanResult(item); } }); _isScanningSubscription = FlutterBluePlus.isScanning.listen((state) { if (!state && _device == null) { stateStr.value = '未搜索到 AI PEN 设备'; isRescan.value = true; } else { stateStr.value = '搜索中...'; isRescan.value = false; } }); startScan(); } @override void onClose() { _scanResultsSubscription.cancel(); _isScanningSubscription.cancel(); _stopScan(); _disconnect(); super.onClose(); } Future startScan() async { await FlutterBluePlus.startScan( timeout: const Duration(seconds: 15), withServices: [ Guid('FFF0'), ], withNames: ['AI PEN'], ); } Future _stopScan() async { await FlutterBluePlus.stopScan(); } Future _connect() async { await _device?.connect(); } Future _disconnect() async { await _device?.disconnect(); } void _handlerScanResult(ScanResult result) async { if (result.device.platformName == 'AI PEN') { _device = result.device; await _stopScan(); await _connect(); stateStr.value = '已连接到 AI PEN 设备'; } } }