flush method
Upload now.
Implementation
Future<void> flush(String reason) async {
// Lifecycle flushes must include the pump's pending capture even though
// the cache no longer owns a debounce timer while a call is active.
if (reason == 'foreground' || reason == 'background') {
for (final source in _sources) {
final capture = source.captureSharedNow?.call();
if (capture == null) continue;
try {
await capture.timeout(flushTimeout);
} catch (_) {}
break;
}
}
if (_captureTimer?.isActive ?? false) {
_captureTimer!.cancel();
_captureTimer = null;
try {
await _runCapture().timeout(flushTimeout);
} catch (_) {}
}
final captureDeadline = DateTime.now().add(flushTimeout);
while (_captureInFlight) {
final remaining = captureDeadline.difference(DateTime.now());
if (remaining <= Duration.zero) break;
try {
await _captureDone?.future.timeout(remaining);
} on TimeoutException {
break;
}
}
await _drainWrites();
final sync = _sync;
if (sync == null) return;
try {
await sync.flush(reason).timeout(flushTimeout);
} catch (_) {}
}