handleData method

void handleData(
  1. dynamic data,
  2. EventSink sink
)

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