execute method
Implementation
@override
Future<RawEvent> execute(RawEvent event) async {
final userInfo = await analytics!.state.userInfo.state;
event.anonymousId = userInfo.anonymousId;
final enableHashing = analytics!.state.configuration.state.enableHashing;
if (event.type == EventType.identify) {
final identityEvent = event as IdentifyEvent;
UserTraits? mergedTraits = identityEvent.traits != null
? (userInfo.userTraits != null
? mergeUserTraits(identityEvent.traits as UserTraits,
userInfo.userTraits as UserTraits)
: identityEvent.traits)
: userInfo.userTraits;
// Update userInfo with un-hashed traits
analytics!.state.userInfo.setState(UserInfo(
event.anonymousId ?? userInfo.anonymousId,
userId: event.userId ?? userInfo.userId,
userTraits: mergedTraits,
groupTraits: userInfo.groupTraits));
// Hash traits before assigning to the event
if (mergedTraits != null && enableHashing) {
identityEvent.traits = mergedTraits.hashPII();
} else {
identityEvent.traits = mergedTraits;
}
} else if (event.type == EventType.screen ||
event.type == EventType.track) {
UserTraits? userTraits = event.traits ?? userInfo.userTraits;
// Hash traits before assigning to the event
if (userTraits != null && enableHashing) {
event.traits = userTraits.hashPII();
} else {
event.traits = userTraits;
}
} else if (event.type == EventType.alias) {
final previousAnonId = userInfo.anonymousId;
final previousUserId = userInfo.userId;
analytics!.state.userInfo.setState(UserInfo(
event.anonymousId ?? userInfo.anonymousId,
userId: event.userId,
userTraits: userInfo.userTraits,
groupTraits: userInfo.groupTraits));
(event as AliasEvent).previousId = previousUserId ?? previousAnonId;
} else if (event.type == EventType.group) {
final groupEvent = event as GroupEvent;
final mergedTraits = groupEvent.traits != null
? (userInfo.groupTraits != null
? mergeGroupTraits(groupEvent.traits as GroupTraits,
userInfo.groupTraits as GroupTraits)
: groupEvent.traits)
: userInfo.groupTraits;
analytics!.state.userInfo.setState(UserInfo(
event.anonymousId ?? userInfo.anonymousId,
userId: event.userId ?? userInfo.userId,
userTraits: userInfo.userTraits,
groupTraits: mergedTraits));
groupEvent.traits = mergedTraits;
}
event.userId ??= userInfo.userId;
event.anonymousId ??= userInfo.anonymousId;
return event;
}