address review
diff --git a/lib/src/usage_impl.dart b/lib/src/usage_impl.dart
index 5965461..872e481 100644
--- a/lib/src/usage_impl.dart
+++ b/lib/src/usage_impl.dart
@@ -83,7 +83,7 @@
late Future<void>? Function() _batchingDelay;
final Queue<String> _batchedEvents = Queue<String>();
- Future<void>? _nextSending;
+ bool _isSendingScheduled = false;
late final String _url;
late final String _batchingUrl;
@@ -271,15 +271,16 @@
_sendController.add(eventArgs);
_batchedEvents.add(postHandler.encodeHit(eventArgs));
- if (_nextSending == null) {
+ if (!_isSendingScheduled) {
final delay = _batchingDelay();
if (delay == null) {
_trySendBatches(completer);
} else {
+ _isSendingScheduled = true;
unawaited(delay.then((value) {
+ _isSendingScheduled = false;
_trySendBatches(completer);
}));
- _nextSending = completer.future.then((_) => _nextSending = null);
}
}
return completer.future;
@@ -290,7 +291,7 @@
// Send no more than 16K per batch.
static const _maxBytesPerBatch = 16000;
- void _trySendBatches(Completer completer) {
+ void _trySendBatches(Completer<void> completer) {
final futures = <Future>[];
while (_batchedEvents.isNotEmpty) {
final batch = <String>[];
@@ -308,9 +309,10 @@
final future = postHandler.sendPost(
batch.length == 1 ? _url : _batchingUrl, batch);
_recordFuture(future);
+ futures.add(future);
}
}
- Future.wait(futures).then((_) => completer.complete());
+ completer.complete(Future.wait(futures).then((_) {}));
}
void _recordFuture(Future f) {