From b968fb872d459c37a8e400b7e2d999688728b59b Mon Sep 17 00:00:00 2001 From: uvok Date: Wed, 30 Jul 2025 13:59:48 +0200 Subject: Clear all hardcoded flutter ble stuff --- .../flutter_blue_plus_scanner_controller.dart | 47 +++++++++++++++++++--- 1 file changed, 41 insertions(+), 6 deletions(-) (limited to 'lib/control/flutter_blue_plus_scanner_controller.dart') diff --git a/lib/control/flutter_blue_plus_scanner_controller.dart b/lib/control/flutter_blue_plus_scanner_controller.dart index b6f9dfc..f8cd741 100644 --- a/lib/control/flutter_blue_plus_scanner_controller.dart +++ b/lib/control/flutter_blue_plus_scanner_controller.dart @@ -4,6 +4,9 @@ import 'package:badge/model/flutter_blue_plus_device.dart'; import 'package:badge/model/device.dart'; import 'package:badge/control/scanner_controller.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; +import 'package:logger/logger.dart'; + +var logger = Logger(); class FlutterBluePlusScannerController extends ScannerControllerImpl { final StreamController> _scanResultsController = @@ -17,18 +20,33 @@ class FlutterBluePlusScannerController extends ScannerControllerImpl { Duration timeout = const Duration(seconds: 5), }) async { stopScan(); + + var system = await FlutterBluePlus.systemDevices([]); + for (var d in system) { + logger.i('${d.platformName} already connected to! ${d.remoteId}'); + } + super.setStatus(ScanStatus.scanning); - var subscription = FlutterBluePlus.scanResults.listen((results) { - List devices = results - .map((d) => FlutterBluePlusDevice.fromScan(d)) - .toList(); - _scanResultsController.add(devices); - }); + var subscription = FlutterBluePlus.scanResults.listen( + (results) { + List devices = results + .map((d) => FlutterBluePlusDevice.fromScan(d)) + .toList(); + _scanResultsController.add(devices); + }, + onError: (err) { + logger.e(err); + super.setStatus(ScanStatus.error); + }, + ); // either this, or the cancel in the finally block, should do the same? FlutterBluePlus.cancelWhenScanComplete(subscription); + // withKeywords: ["NimBLE"], on Android await FlutterBluePlus.startScan(timeout: Duration(seconds: 5)); await FlutterBluePlus.isScanning.where((val) => val == false).first; + + super.setStatus(ScanStatus.finished); } @override @@ -41,4 +59,21 @@ class FlutterBluePlusScannerController extends ScannerControllerImpl { stopScan().ignore(); _scanResultsController.close(); } + + List _scanResults = []; + bool _deviceInResults(ScanResult incomingDev) => _scanResults.any( + (existingDev) => existingDev.device.remoteId == incomingDev.device.remoteId, + ); + void _onScanResult(List results) { + if (results.isNotEmpty) { + for (var r in results.where( + (d) => d.rssi > -90 && !_deviceInResults(d), + )) { + logger.i( + '${r.device.remoteId}: "${r.device.platformName}" / "${r.device.advName}" / "${r.advertisementData.advName}" found!', + ); + _scanResults.add(r); + } + } + } } -- cgit v1.2.3