waitForConnection static method
Wait for successful connection with timeout
Convenience method that waits for a successful Classic Bluetooth connection.
Implementation
static Future<void> waitForConnection({
Duration timeout = const Duration(seconds: 30),
}) async {
final completer = Completer<void>();
StreamSubscription<ClassicConnectionEvent>? subscription;
Timer? timeoutTimer;
// Set up timeout
timeoutTimer = Timer(timeout, () {
subscription?.cancel();
if (!completer.isCompleted) {
completer.completeError(BluetoothException('CONNECTION_TIMEOUT',
'Connection timeout after ${timeout.inSeconds} seconds'));
}
});
// Listen for connection events
subscription = classicConnectionEvents.listen(
(event) {
if (event.isConnected) {
timeoutTimer?.cancel();
subscription?.cancel();
if (!completer.isCompleted) {
completer.complete();
}
} else if (event.isError) {
timeoutTimer?.cancel();
subscription?.cancel();
if (!completer.isCompleted) {
completer.completeError(BluetoothException('CONNECTION_ERROR',
event.message ?? 'Unknown connection error'));
}
}
},
onError: (error) {
timeoutTimer?.cancel();
subscription?.cancel();
if (!completer.isCompleted) {
completer.completeError(error);
}
},
);
return completer.future;
}