diff --git a/lib/connector/meshcore_connector.dart b/lib/connector/meshcore_connector.dart index ef24be7..e4a3324 100644 --- a/lib/connector/meshcore_connector.dart +++ b/lib/connector/meshcore_connector.dart @@ -739,13 +739,23 @@ class MeshCoreConnector extends ChangeNotifier { }, ); - await FlutterBluePlus.startScan( - withServices: [Guid(MeshCoreUuids.service)], - timeout: timeout, - androidScanMode: AndroidScanMode.lowLatency, - ); + if (PlatformInfo.isWeb) { + await FlutterBluePlus.startScan( + withServices: [Guid(MeshCoreUuids.service)], + ); + // On web, the chooser returns once a device is picked, but the scanResults + // stream might take a moment to emit the last result. Wait briefly so the + // device appears in the UI before stopScan() clears the list. + await Future.delayed(const Duration(milliseconds: 500)); + } else { + await FlutterBluePlus.startScan( + withServices: [Guid(MeshCoreUuids.service)], + timeout: timeout, + androidScanMode: AndroidScanMode.lowLatency, + ); - await Future.delayed(timeout); + await Future.delayed(timeout); + } } catch (e) { debugPrint("Scan error: $e"); // On web, suppress common cancellation and chooser errors @@ -776,6 +786,12 @@ class MeshCoreConnector extends ChangeNotifier { } } catch (_) {} _scanSubscription = null; + + // On web, don't clear results immediately so the picked device remains visible + if (!PlatformInfo.isWeb) { + _scanResults.clear(); + notifyListeners(); + } } Future connect(BluetoothDevice device, {String? displayName}) async {