diff options
author | uvok | 2025-07-30 13:59:48 +0200 |
---|---|---|
committer | uvok | 2025-07-30 13:59:48 +0200 |
commit | b968fb872d459c37a8e400b7e2d999688728b59b (patch) | |
tree | 20e5a62b5ea4c28e0f8806821074c1e301aa4db5 /lib/control/flutter_blue_plus_scanner_controller.dart | |
parent | 5e1ec6faca3f89cfb96918c48cb2b1deccac65c5 (diff) |
Clear all hardcoded flutter ble stuff
Diffstat (limited to 'lib/control/flutter_blue_plus_scanner_controller.dart')
-rw-r--r-- | lib/control/flutter_blue_plus_scanner_controller.dart | 47 |
1 files changed, 41 insertions, 6 deletions
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<List<Device>> _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<Device> devices = results - .map((d) => FlutterBluePlusDevice.fromScan(d)) - .toList(); - _scanResultsController.add(devices); - }); + var subscription = FlutterBluePlus.scanResults.listen( + (results) { + List<Device> 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<ScanResult> _scanResults = []; + bool _deviceInResults(ScanResult incomingDev) => _scanResults.any( + (existingDev) => existingDev.device.remoteId == incomingDev.device.remoteId, + ); + void _onScanResult(List<ScanResult> 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); + } + } + } } |