summaryrefslogtreecommitdiff
path: root/lib/control
diff options
context:
space:
mode:
authoruvok2025-07-30 13:14:38 +0200
committeruvok2025-07-30 13:14:38 +0200
commit4311e39e65de3ed10f145e556085e7fb238e6e60 (patch)
tree1073ff3a3cdd561087bc4d5b7620e49183741a1f /lib/control
parent9536bfa04db171aee987f042dccc4c2f16fa0f29 (diff)
Add implementations of BLE controller
q&d
Diffstat (limited to 'lib/control')
-rw-r--r--lib/control/flutter_blue_plus_scanner_controller.dart44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/control/flutter_blue_plus_scanner_controller.dart b/lib/control/flutter_blue_plus_scanner_controller.dart
new file mode 100644
index 0000000..b6f9dfc
--- /dev/null
+++ b/lib/control/flutter_blue_plus_scanner_controller.dart
@@ -0,0 +1,44 @@
+import 'dart:async';
+import 'package:badge/control/scanner_controller_impl.dart';
+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';
+
+class FlutterBluePlusScannerController extends ScannerControllerImpl {
+ final StreamController<List<Device>> _scanResultsController =
+ StreamController<List<Device>>.broadcast();
+
+ @override
+ Stream<List<Device>> get scanResultsStream => _scanResultsController.stream;
+
+ @override
+ Future<void> startScan({
+ Duration timeout = const Duration(seconds: 5),
+ }) async {
+ stopScan();
+ super.setStatus(ScanStatus.scanning);
+
+ var subscription = FlutterBluePlus.scanResults.listen((results) {
+ List<Device> devices = results
+ .map((d) => FlutterBluePlusDevice.fromScan(d))
+ .toList();
+ _scanResultsController.add(devices);
+ });
+ // either this, or the cancel in the finally block, should do the same?
+ FlutterBluePlus.cancelWhenScanComplete(subscription);
+ await FlutterBluePlus.startScan(timeout: Duration(seconds: 5));
+ await FlutterBluePlus.isScanning.where((val) => val == false).first;
+ }
+
+ @override
+ Future<void> stopScan() async {
+ await FlutterBluePlus.stopScan();
+ }
+
+ @override
+ void dispose() {
+ stopScan().ignore();
+ _scanResultsController.close();
+ }
+}