userIdentifier method
Identifies the user and updates their attributes.
Implementation
Future<void> userIdentifier({
required String? externalId,
String? name,
String? email,
String? phoneNumber,
String? referralCode,
Map<String, dynamic>? properties,
}) async {
if (nudgeDisabled) {
NLogger.i("Nudge user identification is disabled.");
return;
}
if (externalId == null || externalId.isEmpty) {
NLogger.e("User Identifier failed: External ID cannot be null or empty.");
return;
}
// clean properties to ensure no null values
properties ??= {};
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.d("Identifying User: External ID: $externalId");
await _nudgeCoreV2NativeServices.invokeNativeMethod('nudge_user_identify', {
'externalId': externalId,
'name': name,
'email': email,
'phoneNumber': phoneNumber,
'referralCode': referralCode,
'properties': properties,
});
NLogger.d("User Identification Completed: External ID: $externalId");
}