start method
void
start()
Implementation
void start() {
for (var deviceId in deviceIds) {
deviceCubits[deviceId] = BleDeviceCubit();
deviceCubits[deviceId]!.mockDevices.addAll(mockDevices);
// handle state transitions for each device's cubit and forward them
// to this cubit's state
deviceSubscriptions[deviceId] =
deviceCubits[deviceId]!.stream.listen((state) async {
if (state is BleDeviceAuthorizing) {
await deviceCubits[deviceId]!.startScanning();
} else if (state is BleDeviceScanning) {
final device = state.discoveredDevices
.where((d) => d.platformName == deviceId)
.firstOrNull;
if (device != null) {
await deviceCubits[deviceId]!.connect(device);
} else if (!state.scanIsInProgress) {
await Future.delayed(const Duration(seconds: 5));
await deviceCubits[deviceId]!.startScanning();
}
} else if (state is BleDeviceConnected) {
if (state.characteristicStreams.containsKey(GKCharId.report)) {
reportSubscriptions[deviceId] =
state.characteristicStreams[GKCharId.report]!.listen((report) {
emit(BleMultiDeviceState(
deviceStates:
deviceCubits.map((k, v) => MapEntry(k, v.state)),
reports: {deviceId: report}));
});
}
} else if (state is BleDeviceDisconnected) {
reportSubscriptions[deviceId]?.cancel();
reportSubscriptions.remove(deviceId);
await deviceCubits[deviceId]!.startScanning();
}
emit(BleMultiDeviceState(
deviceStates: deviceCubits.map((k, v) => MapEntry(k, v.state)),
reports: {}));
});
}
}