methodCallHandler method

Future methodCallHandler(
  1. MethodCall methodCall
)

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}');
      }
  }
}