3 changed files with 187 additions and 3 deletions
@ -1,3 +1,74 @@ |
|||||
|
import 'dart:async'; |
||||
|
|
||||
|
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; |
||||
import 'package:get/get.dart'; |
import 'package:get/get.dart'; |
||||
|
|
||||
class MeetingConnectController extends GetxController {} |
class MeetingConnectController extends GetxController { |
||||
|
RxString stateStr = '搜索中...'.obs; |
||||
|
RxBool isRescan = false.obs; |
||||
|
RxBool isImportedFiles = false.obs; |
||||
|
|
||||
|
late StreamSubscription<List<ScanResult>> _scanResultsSubscription; |
||||
|
late StreamSubscription<bool> _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<void> startScan() async { |
||||
|
await FlutterBluePlus.startScan( |
||||
|
timeout: const Duration(seconds: 15), |
||||
|
withServices: [ |
||||
|
Guid('FFF0'), |
||||
|
], |
||||
|
withNames: ['AI PEN'], |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
Future<void> _stopScan() async { |
||||
|
await FlutterBluePlus.stopScan(); |
||||
|
} |
||||
|
|
||||
|
Future<void> _connect() async { |
||||
|
await _device?.connect(); |
||||
|
} |
||||
|
|
||||
|
Future<void> _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 设备'; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|||||
Loading…
Reference in new issue