更新ios蓝牙开关判定
This commit is contained in:
39
lib/common/util/BluetoothHelper.dart
Normal file
39
lib/common/util/BluetoothHelper.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user