track method
Tracks an event with optional properties.
Implementation
Future<void> track({
required String event,
Map<String, dynamic>? properties,
}) async {
if (nudgeDisabled) {
NLogger.i("Nudge tracking is disabled. Event: $event");
return;
}
if (event.isEmpty) {
NLogger.e("Track event failed: Event name cannot be null or empty.");
return;
}
// clean properties to ensure no null values
properties ??= {};
//converts list into a comma-separated string
// properties.removeWhere(
// (key, value) {
// if (value == null) {
// NLogger.e("Removing null $key");
// return true;
// }
// return false;
// },
// );
properties = Map<String, dynamic>.from(properties ?? {});
properties.updateAll((key, value) {
if (value is List<int> ||
value is List<double> ||
value is List<bool>||
value is List<String>) {
// Convert numeric/bool lists into comma-separated string
return value.join(",");
}
return value; // Leave other types unchanged
});
properties.removeWhere(
(key, value) {
if (value == null ||
(value is String && value.isEmpty) ||
(value is Map)||
(value is List)) {
NLogger.e("Removing null or invalid property: $key");
return true;
}
return false;
},
);
NLogger.i("Tracking Event: $event, Properties: ${jsonEncode(properties)}");
await _nudgeCoreV2NativeServices.invokeNativeMethod('nudge_track', {
'event': event,
'properties': properties,
});
NLogger.i("Track Event Completed: $event");
}