You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.8 KiB

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<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 设备';
}
}
}