更新ios蓝牙开关判定

This commit is contained in:
wyf
2025-09-01 09:47:58 +08:00
parent 0fc0cf6c6b
commit 8536cb61f8
5 changed files with 105 additions and 296 deletions

View File

@@ -0,0 +1,39 @@
import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
class BluetoothHelper {
static StreamSubscription<BluetoothAdapterState>? _subscription;
/// 获取当前蓝牙是否开启(跨平台封装)
static Future<bool> isBluetoothOn({Duration timeout = const Duration(seconds: 2)}) async {
// 先尝试直接获取Android 上几乎即时可用)
bool directCheck = await FlutterBluePlus.isOn;
if (directCheck) return true;
// iOS 上有初始化延迟,用 adapterState.first 再确认一次
try {
BluetoothAdapterState state = await FlutterBluePlus.adapterState
.firstWhere((s) => s != BluetoothAdapterState.unknown,
orElse: () => BluetoothAdapterState.unknown)
.timeout(timeout);
return state == BluetoothAdapterState.on;
} catch (_) {
return false;
}
}
/// 监听蓝牙状态变化
static void listenBluetoothState(void Function(bool isOn) onChange) {
_subscription?.cancel();
_subscription = FlutterBluePlus.adapterState.listen((state) {
onChange(state == BluetoothAdapterState.on);
});
}
/// 停止监听
static void cancelListener() {
_subscription?.cancel();
_subscription = null;
}
}