reconcile method

Future<void> reconcile()

Reads one coherent latest cache snapshot and queues only changed output.

Implementation

Future<void> reconcile() async {
  final presentation = _presentation;
  if (!_started || presentation == null || _renderer == null) return;
  final observedGeneration = _generation;
  final cache = await _readLatest();
  if (!_started || observedGeneration != _generation) return;
  if (cache == null) {
    await _clearWhileRunning();
    return;
  }

  final input = (cache: cache, presentation: presentation);
  final fingerprint = _courseWidgetFingerprint(input);
  if ((_commit == null && fingerprint == _persistedFingerprint) ||
      fingerprint == _pending?.fingerprint) {
    return;
  }

  final generation = ++_generation;
  _pending = (
    generation: generation,
    fingerprint: fingerprint,
    input: input,
  );
  unawaited(_drain());
}