handleData method
Parses the received data.
Implementation
void handleData(dynamic data, EventSink sink) {
ScanResult? result;
if (Platform.isIOS || Platform.isMacOS || Platform.isWindows) {
data as Map<dynamic, dynamic>;
Uint8List manufacturerIdAndData =
data["manufacturerSpecificData"] as Uint8List;
if (Platform.isWindows) {
final int manufacturerId = data["manufacturerId"] as int;
final b = BytesBuilder();
final l1 = Uint8List(2)..buffer.asInt16List()[0] = manufacturerId;
b.add(l1);
b.add(manufacturerIdAndData);
manufacturerIdAndData = b.toBytes();
}
Map<String, dynamic> manufacturerSpecificData = {};
// Check that both manufacturerID AND data is present
if (manufacturerIdAndData.length >= 3) {
manufacturerSpecificData = {
"${manufacturerIdAndData[0] | manufacturerIdAndData[1] << 8}":
manufacturerIdAndData.skip(2).toList(),
};
}
final Map<String, dynamic> scanRecord = {
'deviceName': data['deviceName'],
'manufacturerSpecificData': manufacturerSpecificData,
'serviceData': data['serviceData'],
'serviceUuids': data['serviceUuids'],
};
data['scanRecord'] = scanRecord;
data['device'] = {'address': data['address']};
result = ScanResult.fromJson(Map<String, dynamic>.from(data));
} else {
result = ScanResult.fromJson(
jsonDecode(data as String) as Map<String, dynamic>,
);
}
sink.add(result);
}