AmbientService constructor

AmbientService({
  1. required BluetoothService service,
})

A Movisens service containing Ambient data.

Implementation

AmbientService({required super.service}) {
  // service = service;
  List<Stream<MovisensEvent>> nonNullStreams = [];
  // For each characteristic that is supported in the service
  for (BluetoothCharacteristic char in service.characteristics) {
    String charUuid = char.uuid.toString();
    MovisensBluetoothCharacteristics? moviChar =
        characteristicUUIDToMovisensBluetoothCharacteristics[charUuid];

    // add light stream
    if (moviChar == MovisensBluetoothCharacteristics.light) {
      _lightEvents = char.lastValueStream
          .skipWhile((element) => element.isEmpty)
          .map((event) =>
              LightEvent(bytes: event, deviceId: service.remoteId.str))
          .asBroadcastStream();
      nonNullStreams.add(_lightEvents!);
    }
    // add light RGB stream
    else if (moviChar == MovisensBluetoothCharacteristics.lightRGB) {
      _lightRGBEvents = char.lastValueStream
          .skipWhile((element) => element.isEmpty)
          .map((event) =>
              LightRGBEvent(bytes: event, deviceId: service.remoteId.str))
          .asBroadcastStream();
      nonNullStreams.add(_lightRGBEvents!);
    } // add sensor temperature stream
    else if (moviChar == MovisensBluetoothCharacteristics.sensorTemperature) {
      _sensorTemperatureEvents = char.lastValueStream
          .skipWhile((element) => element.isEmpty)
          .map((event) => SensorTemperatureEvent(
              bytes: event, deviceId: service.remoteId.str))
          .asBroadcastStream();
      nonNullStreams.add(_sensorTemperatureEvents!);
    }
  }
  _events = Rx.merge(nonNullStreams);
}