BarcodeCountSession.fromJSON constructor

BarcodeCountSession.fromJSON(
  1. Map<String, dynamic> event
)

Implementation

factory BarcodeCountSession.fromJSON(Map<String, dynamic> event) {
  final json = jsonDecode(event['session']);
  final frameSequenceId = json['frameSequenceId'] as int;
  final recognizedBarcodesJson = json['recognizedBarcodes'] as List<dynamic>;
  final recognizedClustersJson = (json['recognizedClusters'] ?? []) as List<dynamic>;
  final hasClusters = recognizedClustersJson.isNotEmpty;

  // Only build the barcode map if clusters are present
  final List<Barcode> trackedCodes;
  final List<Cluster> recognizedClusters;

  if (hasClusters) {
    final Map<String, Barcode> barcodeMap = {};
    trackedCodes = [];
    for (final barcodeJson in recognizedBarcodesJson) {
      final barcode = Barcode.fromJSON(barcodeJson as Map<String, dynamic>);
      final identifier = barcodeJson['identifier'] as String;
      barcodeMap[identifier] = barcode;
      trackedCodes.add(barcode);
    }
    recognizedClusters = recognizedClustersJson.cast<Map<String, dynamic>>().map((e) {
      e['_barcodeMap'] = barcodeMap;
      return Cluster.fromJSON(e);
    }).toList();
  } else {
    trackedCodes = recognizedBarcodesJson.map((e) => Barcode.fromJSON(e as Map<String, dynamic>)).toList();
    recognizedClusters = [];
  }

  final additionalBarcodes = (json['additionalBarcodes'] as List<dynamic>)
      .cast<Map<String, dynamic>>()
      .map((e) => Barcode.fromJSON(e))
      .toList()
      .cast<Barcode>();

  final frameId = event['frameId'] as String;
  final viewId = event['viewId'] as int;

  return BarcodeCountSession._(
      trackedCodes, additionalBarcodes, recognizedClusters, frameSequenceId, frameId, viewId);
}