flush method

Future<void> flush(
  1. String reason
)

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 (_) {}
}