flush method
Implementation
Future<void> flush() async {
clearTimeout();
if (!failed_) {
if (pendingCount_ > 0) {
List<Exposure>? exposures;
List<GoalAchievement>? achievements;
int eventCount;
eventCount = pendingCount_;
if (eventCount > 0) {
if (exposures_.isNotEmpty) {
exposures = exposures_.toList();
exposures_.clear();
}
if (achievements_.isNotEmpty) {
achievements = achievements_.toList();
achievements_.clear();
}
pendingCount_ = 0;
}
if (eventCount > 0) {
List<Unit> units = [];
for (var entry in units_.entries) {
units.add(Unit(
type: entry.key,
uid: utf8.decode(getUnitHash(entry.key, entry.value))));
}
units_.forEach((key, value) {
units.add(
Unit(type: key, uid: utf8.decode(getUnitHash(key, value))));
});
final PublishEvent event = PublishEvent(
hashed: true,
units: units,
publishedAt: clock_.millis(),
exposures: exposures ?? [],
goals: achievements ?? [],
attributes: attributes_.toList(),
);
event.hashed = true;
event.publishedAt = clock_.millis();
final Completer<void> result = Completer<void>();
eventHandler_.publish(this, event).future.then((_) {
logEvent(EventType.publish, event);
result.complete();
}).catchError((error) {
logError(error);
result.completeError(error);
});
return result.future;
}
}
} else {
exposures_.clear();
achievements_.clear();
pendingCount_ = 0;
}
return Future.value();
}