import 'dart:convert'; import 'dart:typed_data'; import 'package:universal_ble/universal_ble.dart'; /// Mock implementation of [UniversalBlePlatform] for testing class MockUniversalBle extends UniversalBlePlatform { final Map _connectionStateMap = {}; final _mockBleDevice = BleDevice( name: 'MockDevice', deviceId: 'MockDeviceId', rssi: 50, manufacturerDataList: [], ); Uint8List _serviceValue = utf8.encode('Result'); bool _isScanning = false; final BleService _mockService = BleService('180a', [ BleCharacteristic.withMetaData( deviceId: 'MockDeviceId', serviceId: '180a', uuid: '220a', properties: [ CharacteristicProperty.read, CharacteristicProperty.write, CharacteristicProperty.notify, ], descriptors: [ BleDescriptor('220b'), ], ), ]); @override Future startScan({ ScanFilter? scanFilter, PlatformConfig? platformConfig, }) async { _isScanning = true; updateScanResult(_mockBleDevice); } @override Future stopScan() async { _isScanning = false; } @override Future isScanning() async { return _isScanning; } @override Future connect(String deviceId, {Duration? connectionTimeout}) async { updateConnection(deviceId, true); _connectionStateMap[deviceId] = BleConnectionState.connected; } @override Future disconnect(String deviceId) async { updateConnection(deviceId, false); _connectionStateMap[deviceId] = BleConnectionState.disconnected; } @override Future> discoverServices( String deviceId, bool withDescriptors) async { return [_mockService]; } @override Future enableBluetooth() async { await Future.delayed(const Duration(milliseconds: 500)); return true; } @override Future getBluetoothAvailabilityState() async { return AvailabilityState.poweredOn; } @override Future> getSystemDevices(List? withServices) async { return [_mockBleDevice]; } @override Future readValue( String deviceId, String service, String characteristic, { final Duration? timeout, }) async { await Future.delayed(const Duration(milliseconds: 500)); return _serviceValue; } @override Future writeValue( String deviceId, String service, String characteristic, Uint8List value, BleOutputProperty bleOutputProperty) async { await Future.delayed(const Duration(milliseconds: 500)); _serviceValue = value; } @override Future requestMtu(String deviceId, int expectedMtu) async { await Future.delayed(const Duration(seconds: 1)); return 512; } @override Future setNotifiable(String deviceId, String service, String characteristic, BleInputProperty bleInputProperty) async {} @override Future isPaired(String deviceId) async { await Future.delayed(const Duration(milliseconds: 500)); return true; } @override Future pair(String deviceId) async { updatePairingState(deviceId, true); return true; } @override Future unpair(String deviceId) async { updatePairingState(deviceId, false); } @override Future getConnectionState(String deviceId) async { return _connectionStateMap[deviceId] ?? BleConnectionState.disconnected; } @override Future disableBluetooth() async { return true; } @override Future requestPermissions( {bool withAndroidFineLocation = false}) async { return; } }