loadLogo static method
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);
}
}