Implementation
Stream<BLEDevice?> get newStateDevice async* {
// 1. MethodChannel로 초기값 get
final List deviceInfo =
await _methodChannel.invokeMethod('device_new_state');
String name = deviceInfo[0];
String address = deviceInfo[1];
BondState bondState = BondState.getObj(deviceInfo[2]);
bool isConnected = deviceInfo[3];
BLEDevice device = BLEDevice(
name: name,
address: address,
bondState: bondState,
isConnected: isConnected);
logger.d("$name $address $bondState $isConnected");
yield device;
// 2. 스트림
Stream<BLEDevice> stream = _deviceNewStateEventChannel
.receiveBroadcastStream()
.map((newStateDevice) {
if (newStateDevice != null) {
String name = newStateDevice[0];
String address = newStateDevice[1];
BondState bondState = BondState.getObj(newStateDevice[2]);
bool isConnected = newStateDevice[3];
BLEDevice device = BLEDevice(
name: name,
address: address,
bondState: bondState,
isConnected: isConnected);
return device;
} else {
return BLEDevice(name: "", address: "", bondState: BondState.none);
}
});
yield* stream;
}