Pakete, Repositories und App-Kategorien suchen

Paketdetailsv1.0.0

cached_value

Eine einfache Möglichkeit, Werte zu speichern, die aus eher kostspieligen Operationen resultieren.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
11.400
Likes
25
Pub-Punkte
160

Paket installieren

flutter pub add cached_value

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

cached_value ist ein leichtgewichtiges Flutter/Dart-Paket, das eine einfache Möglichkeit bietet, Werte zu speichern, die aus kostspieligen Operationen abgeleitet werden. Es stellt sicher, dass ein Wert nach der Berechnung gespeichert und ohne erneute Berechnung wiederverwendet wird, was die Leistung verbessert und die Latenz verringert. Das Paket unterstützt asynchrone Operationen und verwalte den Cache automatisch mit konfigurierbaren Ablaufzeiten. Ideal für Szenarien wie API-Antworten, komplexe Berechnungen oder Datenanalyse, bei denen wiederholte Berechnungen vermieden werden sollen.

Anwendungsfälle

  • API-Antworten zwischenspeichern
  • Gespeicherte Berechnungsergebnisse
  • Reduzierung von überflüssiger Datenverarbeitung
  • Verbesserung der App-Reaktionsfähigkeit
  • Verwaltung kostspieliger Initialisierungsaufgaben
  • Vorübergehender Zustand beibehalten

Hauptmerkmale

  • Einfaches asynchrones Caching
  • Konfigurierbare Ablaufzeit
  • Automatische Neuberechnung bei Ablauf
  • Unterstützt nullsichere Werte
  • Leichtgewichtig und minimale Abhängigkeiten
  • Plattformübergreifende Kompatibilität

Geeignet für

  • Entwickler, die einfaches Caching suchen
  • Apps mit häufigen teuren Berechnungen
  • Leistungs-Optimierungsprojekte
  • Statusverwaltung mit zwischengespeicherten Daten
  • Rapid-Caching-Lösungen prototypisch umsetzen

Hinweise

  • Nicht geeignet für große Datensätze
  • Keine integrierte Persistenz bei App-Neustarts
  • In einigen Fällen ist eine manuelle Cache-Bereinigung erforderlich
  • Beschränkt auf Speicherung im Arbeitsspeicher
  • Am besten geeignet für kurzlebige zwischengespeicherte Werte
  • Unterstützt keine komplexen Cache-Richtlinien

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

cached_value

Pub

A simple way to cache values that result from rather expensive operations.

It is useful to cache values that:

  • Are computed from other values in a consistent way;
  • Can be changed given known and unknown conditions;
  • Should not be computed on every access (like a getter);

A cached_value is better used over imperative APIs, such as Flutter's render objects. See Motivation for more.

Installation

Add to pubspec.yaml:

dart pub add cached_value

Usage

A cache can start as a simple manually controlled cache and then be enhanced with automatic functionalities such as dependencies and time-to-live (TTL).

1.Creating a simple cached that is invaldiated manually
  int factorial(int n) {
    if (n < 0) throw ('Negative numbers are not allowed.');
    return n <= 1 ? 1 : n * factorial(n - 1);
  }

  int originalValue = 1;
  final factorialCache = CachedValue(() => factorial(originalValue));
  print(factorialCache.value); // 1

  originalValue = 6;

  print(factorialCache.value); // 1
  print(factorialCache.isValid) // true, invalid only when invalidate is called
  
  // mark as invalid
  factorialCache.invalidate();
  print(factorialCache.isValid); // false

  print(factorialCache.value); // 720
  print(factorialCache.isValid); // true

Accessing value when the cache is invalid refreshes the cache. It can be refreshed manually via the refresh method:

  // ...
  originalValue = 12;
  factorialCache.refresh();

  print(factorialCache.value); // 12
2. Adding dependencies

A dependent cache is marked as invalid if its dependency value has changed.

  int factorial(int n) {
    if (n < 0) throw ('Negative numbers are not allowed.');
    return n <= 1 ? 1 : n * factorial(n - 1);
  }
  
  int originalValue = 1;
  final factorialCache = CachedValue(
      () => factorial(originalValue),
  ).withDependency(() => originalValue);
  print(factorialCache.value); // 1
  print(factorialCache.isValid); // true
  
  // update value
  originalValue = 6;
  print(factorialCache.isValid); // false

  print(factorialCache.value); // 720
  print(factorialCache.isValid); // true

⚠️Important: The dependency callback is called on every value access. So it is recommended to keep it as declarative as possible.

final someCache = CachedValue(
  // ...
  ).withDependency(
    () => someExpensiveOperation(originalValue), // ❌ Avoid this:
  );
3. Adding time to live (TTL)

A cache can be automatically marked as invalid some time after a refresh.

    int factorial(int n) {
        if (n < 0) throw ('Negative numbers are not allowed.');
        return n <= 1 ? 1 : n * factorial(n - 1);
    }
  
    int originalValue = 1;
    final factorialCache = CachedValue(
      () => factorial(originalValue),
    ).withTimeToLive(
      lifetime: Duration(seconds: 3),
    );
    
    originalValue = 6;
    
    print(factorialCache.value); // 1
    
    await Future.delayed(Duration(seconds: 3));
    
    print(factorialCache.value); // 720

More docs

There is more detailed docs on the API documentation.

Motivation

Some imperative APIs such as the canvas paint on Flutter render objects of Flame's components may benefit from values that can be stored and reused between more than a single frame (or paint).

In some very specific cases, I found very convenient to store some objects across frames, like Paint and TextPainter instances.

Example on a render object:

class BlurredRenderObject extends RenderObject {

  // ...

  double _blurSigma = 0.0;
  double get blurSigma => _blurSigma;
  set blurSigma(double value) {
    _blurSigma = blurSigma;
    markNeedsPaint();
  }

  // ...

  @override
  void paint(PaintingContext context, Offset offset) {
    final canvas = context.canvas;


    final paint = Paint()..maskFilter = MaskFilter.blur(
        BlurStyle.normal, blurSigma
    );
    canvas.drawRect(Rect.fromLTWH(0, 0, 100, 100), paint);
  }
}

Can be changed to:

class BlurredRenderObject extends RenderObject {

  // ...

  double _blurSigma = 0.0;
  double get blurSigma => _blurSigma;
  set blurSigma(double value) {
    _blurSigma = blurSigma;
    markNeedsPaint();
  }

  // Add cache:
  late final paintCache = CachedValue(
     () => Paint()..maskFilter = MaskFilter.blur(BlurStyle.normal, blurSigma),
  ).withDependency(() => blurSigma);

  // ...

  @override
  void paint(PaintingContext context, Offset offset) {
    final canvas = context.canvas;

    // use cache:
    final paint = paintCache.value;
    canvas.drawRect(Rect.fromLTWH(0, 0, 100, 100), paint);
  }
}

Kategorien

Abhängigkeiten

Abhängigkeiten 2 Einträge

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.