loadLogo static method

Future<void> loadLogo(
  1. String? imageUrl
)

Laedt das Bild einmal und behaelt es.

Wirft nie: ein Fehlschlag (Frist, Netz, unbrauchbare Adresse, Nicht-200) bedeutet „kein Logo", nicht „Beleg fehlgeschlagen".

Implementation

static Future<void> loadLogo(String? imageUrl) async {
  if (imageUrl == null) {
    return;
  }
  if (_logoBytes.containsKey(imageUrl)) {
    return;
  }

  // Ein laufender Abruf wird geteilt statt verdoppelt: `getReceipts` ruft
  // `init()` fuer jeden Beleg des Zeitraums, und die tragen fast immer
  // dieselbe Adresse. Die Cache-Pruefung oben liegt vor dem `await`, also
  // gingen sonst N gleiche Requests gleichzeitig hinaus.
  final laufend = _laufend[imageUrl];
  if (laufend != null) {
    return laufend;
  }

  final abruf = _holen(imageUrl);
  _laufend[imageUrl] = abruf;
  try {
    await abruf;
  } finally {
    _laufend.remove(imageUrl);
  }
}