main
1import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_service.dart';
2import 'package:flutter_blue_plus/flutter_blue_plus.dart' as fbp;
3import 'package:flutter_blue_plus/flutter_blue_plus.dart' show Guid;
4
5/// UUID wrapper for FlutterBluePlus
6final class FlutterBluePlusUUID extends BluetoothUuid<Guid> {
7 /// Create a [FlutterBluePlusUUID] from a [Guid]
8 FlutterBluePlusUUID(Guid uuid): super(uuid: uuid.str128, source: uuid);
9
10 /// Create a [FlutterBluePlusUUID] from a [String]
11 factory FlutterBluePlusUUID.fromString(String uuid) => FlutterBluePlusUUID(Guid(uuid));
12}
13
14/// [BluetoothService] implementation wrapping [fbp.BluetoothService]
15final class FlutterBluePlusService extends BluetoothService<fbp.BluetoothService, FlutterBluePlusCharacteristic> {
16 /// Create [BluetoothService] implementation wrapping [fbp.BluetoothService]
17 FlutterBluePlusService({ required super.uuid, required super.source });
18
19 /// Create a [FlutterBluePlusService] from a [fbp.BluetoothService]
20 factory FlutterBluePlusService.fromSource(fbp.BluetoothService service) {
21 final uuid = FlutterBluePlusUUID(service.serviceUuid);
22 return FlutterBluePlusService(uuid: uuid, source: service);
23 }
24
25 @override
26 List<FlutterBluePlusCharacteristic> get characteristics => source.characteristics
27 .map(FlutterBluePlusCharacteristic.fromSource).toList();
28}
29
30/// Wrapper class with generic interface for a [fbp.BluetoothCharacteristic]
31final class FlutterBluePlusCharacteristic extends BluetoothCharacteristic<fbp.BluetoothCharacteristic> {
32 /// Initialize a [FlutterBluePlusCharacteristic] from the backend specific source
33 FlutterBluePlusCharacteristic.fromSource(fbp.BluetoothCharacteristic source):
34 super(uuid: FlutterBluePlusUUID(source.characteristicUuid), source: source);
35
36 @override
37 bool get canRead => source.properties.read;
38
39 @override
40 bool get canWrite => source.properties.write;
41
42 @override
43 bool get canWriteWithoutResponse => source.properties.writeWithoutResponse;
44
45 @override
46 bool get canNotify => source.properties.notify;
47
48 @override
49 bool get canIndicate => source.properties.indicate;
50}