methodCallHandler method
Implementation
Future<dynamic> methodCallHandler(MethodCall methodCall) async {
switch (methodCall.method) {
case 'stateUpdate':
_stateStreamController.add(
BBState.values.firstWhere(
(v) => (v.name == methodCall.arguments['value']),
),
);
return;
case 'authorizationStatusUpdate':
_authorizationStatusStreamController.add(
BBAuthorization.values.firstWhere(
(v) => (v.name == methodCall.arguments['value']),
),
);
return;
case 'scanEnabledUpdate':
_scanEnabledStreamController.add(
methodCall.arguments['value'],
);
return;
case 'scanResultUpdate':
final data = methodCall.arguments['value'];
if (data == null) {
return;
}
final device = devices[data['id']];
if (device == null) {
return;
}
final scanResult = BBScanResult(
device: device,
rssi: data['rssi'],
connectable: data['connectable'],
advertisedServices: List<String>.from(data['advertisedServices']),
manufacturerId: data['manufacturerId'],
manufacturerName: data['manufacturerName'],
manufacturerData: data['manufacturerData'],
);
_scanResultsStreamController.add(scanResult);
return;
case 'devicesUpdate':
final devices = _devicesStreamController.value;
methodCall.arguments['value'].forEach(
(data) {
devices[data['id']] ??= BBDevice(
id: data['id'],
name: data['name'],
);
},
);
_devicesStreamController.add(devices);
return;
case 'deviceConnectionStatusUpdate':
final deviceId = methodCall.arguments['deviceId'];
final value = BBDeviceConnectionStatus.values.firstWhere(
(v) => (v.name == methodCall.arguments['value']),
);
_deviceConnectionStatusStreamController(deviceId).add(value);
return;
case 'deviceServicesUpdate':
final deviceId = methodCall.arguments['deviceId'];
final value = List<BBService>.from(
methodCall.arguments['value'].map(
(serviceData) => BBService(
id: serviceData['id'],
name: serviceData['name'],
characteristics: List<BBCharacteristic>.from(
serviceData['characteristics'].map(
(characteristicData) => BBCharacteristic(
deviceId: deviceId,
serviceId: serviceData['id'],
id: characteristicData['id'],
name: characteristicData['name'],
properties: Set<BBCharacteristicProperty>.from(
characteristicData['properties'].map(
(property) => BBCharacteristicProperty.values.firstWhere(
(v) => (v.name == property),
),
),
),
),
),
),
),
),
);
_deviceServicesStreamController(deviceId).add(value);
return;
case 'deviceMTUUpdate':
final deviceId = methodCall.arguments['deviceId'];
final value = methodCall.arguments['value'];
_deviceMTUStatusStreamController(deviceId).add(value);
return;
case 'deviceCharacteristicIsNotifyingUpdate':
final deviceId = methodCall.arguments['deviceId'];
final serviceId = methodCall.arguments['serviceId'];
final characteristicId = methodCall.arguments['characteristicId'];
final value = methodCall.arguments['value'];
_deviceCharacteristicNotifyEnabledStreamController(deviceId, serviceId, characteristicId).add(value);
return;
case 'deviceCharacteristicDataUpdate':
final deviceId = methodCall.arguments['deviceId'];
final serviceId = methodCall.arguments['serviceId'];
final characteristicId = methodCall.arguments['characteristicId'];
final value = methodCall.arguments['value'];
_deviceCharacteristicDataStreamController(deviceId, serviceId, characteristicId).add(value);
return;
default:
if (kDebugMode) {
print('Unprocessed event ${methodCall.method} with payload ${methodCall.arguments}');
}
}
}