import 'package:abawo_bt_app/util/constants.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart' show DeviceIdentifier; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'bluetooth_device_model.freezed.dart'; part 'bluetooth_device_model.g.dart'; /// Enum representing the type of Bluetooth device enum DeviceType { /// Universal Shifters device universalShifters, /// Other unspecified device types other, } DeviceType deviceTypeFromUuids(List uuids) { if (uuids.any((uuid) => isAbawoUniversalShiftersDeviceGuid(uuid))) { return DeviceType.universalShifters; } return DeviceType.other; } DeviceType deviceTypeFromString(String type) { return DeviceType.values.firstWhere( (e) => e.toString().split('.').last == type, orElse: () => DeviceType.other, ); } String deviceTypeToString(DeviceType type) { return type.toString().split('.').last; } /// Model representing a Bluetooth device @freezed abstract class BluetoothDeviceModel with _$BluetoothDeviceModel { const factory BluetoothDeviceModel({ /// Unique identifier for the device required String id, /// Name of the device as advertised String? name, /// MAC address of the device required String address, /// Type of the device @Default(DeviceType.other) DeviceType type, /// Additional device information Map? manufacturerData, /// Identifier of the device @DeviceIdentJsonConverter() required DeviceIdentifier deviceIdent, }) = _BluetoothDeviceModel; /// Create a BluetoothDeviceModel from JSON factory BluetoothDeviceModel.fromJson(Map json) => _$BluetoothDeviceModelFromJson(json); } class DeviceIdentJsonConverter implements JsonConverter { const DeviceIdentJsonConverter(); @override DeviceIdentifier fromJson(String json) => DeviceIdentifier(json); @override String toJson(DeviceIdentifier object) => object.str; }