main
1
2
3import 'dart:io';
4
5import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_manager.dart';
6import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_state.dart';
7import 'package:blood_pressure_app/features/bluetooth/backend/flutter_blue_plus/fbp_device.dart';
8import 'package:blood_pressure_app/features/bluetooth/backend/flutter_blue_plus/fbp_discovery.dart';
9import 'package:blood_pressure_app/features/bluetooth/backend/flutter_blue_plus/fbp_service.dart';
10import 'package:blood_pressure_app/features/bluetooth/backend/flutter_blue_plus/fbp_state.dart';
11import 'package:blood_pressure_app/features/bluetooth/backend/flutter_blue_plus/flutter_blue_plus_mockable.dart';
12import 'package:flutter_blue_plus/flutter_blue_plus.dart' as fbp;
13import 'package:flutter_blue_plus/flutter_blue_plus.dart' show Guid, ScanResult;
14
15/// Bluetooth manager for the 'flutter_blue_plus' package
16class FlutterBluePlusManager extends BluetoothManager<ScanResult, Guid, fbp.BluetoothService, fbp.BluetoothCharacteristic> {
17 /// constructor
18 FlutterBluePlusManager([FlutterBluePlusMockable? backend]): backend = (backend ?? FlutterBluePlusMockable()) {
19 logger.finer('init');
20 }
21
22 /// backend implementation
23 final FlutterBluePlusMockable backend;
24
25 @override
26 Future<bool?> enable() async {
27 if (Platform.isAndroid) {
28 await backend.turnOn();
29 return true;
30 }
31 return null;
32 }
33
34 @override
35 BluetoothAdapterState get lastKnownAdapterState {
36 // Check whether our lastKnownState is the same as FlutterBluePlus's
37 assert(_adapterStateParser.parse(backend.adapterStateNow) == _adapterStateParser.lastKnownState);
38 return _adapterStateParser.lastKnownState;
39 }
40
41 final FlutterBluePlusStateParser _adapterStateParser = FlutterBluePlusStateParser();
42
43 @override
44 Stream<BluetoothAdapterState> get stateStream => backend.adapterState.map(_adapterStateParser.parse);
45
46 FlutterBluePlusDiscovery? _discovery;
47
48 @override
49 FlutterBluePlusDiscovery get discovery {
50 _discovery ??= FlutterBluePlusDiscovery(this);
51 return _discovery!;
52 }
53
54 @override
55 FlutterBluePlusDevice createDevice(ScanResult device) => FlutterBluePlusDevice(this, device);
56
57 @override
58 FlutterBluePlusUUID createUuid(Guid uuid) => FlutterBluePlusUUID(uuid);
59
60 @override
61 FlutterBluePlusUUID createUuidFromString(String uuid) => FlutterBluePlusUUID.fromString(uuid);
62
63 @override
64 FlutterBluePlusService createService(fbp.BluetoothService service) => FlutterBluePlusService.fromSource(service);
65
66 @override
67 FlutterBluePlusCharacteristic createCharacteristic(fbp.BluetoothCharacteristic characteristic) => FlutterBluePlusCharacteristic.fromSource(characteristic);
68}