trackStructuredEvent static method

Future<void> trackStructuredEvent({
  1. required String category,
  2. required String action,
  3. String? label,
  4. String? property,
  5. double? value,
  6. List<Map<String, dynamic>>? contexts,
})

Implementation

static Future<void> trackStructuredEvent({
  required String category,
  required String action,
  String? label,
  String? property,
  double? value,
  List<Map<String, dynamic>>? contexts,
}) async {
  if (!await _isTrackingEnabled()) return;

  final payload = await _createBasePayload('se');
  payload['se_ca'] = category;
  payload['se_ac'] = action;
  if (label != null) payload['se_la'] = label;
  if (property != null) payload['se_pr'] = property;
  if (value != null) payload['se_va'] = value.toString();

  if (!_validatePayload(payload)) {
    return;
  }

  if (contexts != null && contexts.isNotEmpty) {
    // print contexts in json string
    _printLargeJson('CONTEXTS JSON', jsonEncode(contexts));

    payload['cx'] = base64Encode(utf8.encode(jsonEncode({
      'schema': 'iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0',
      'data': contexts,
    })));
  }

  // print payload in json string after cx property is added
  _printLargeJson('PAYLOAD JSON', jsonEncode(payload));

  await _sendEvent(payload, 'structured event');
}