reconcile method
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());
}