Advanced

Backpack

Einleitung

Backpack ist ein In-Memory-Singleton-Speichersystem in Nylo Website. Es bietet schnellen, synchronen Zugriff auf Daten waehrend der Laufzeit Ihrer App. Im Gegensatz zu NyStorage, das Daten persistent auf dem Geraet speichert, haelt Backpack Daten im Arbeitsspeicher und wird beim Schliessen der App geleert.

Backpack wird intern vom Framework verwendet, um wichtige Instanzen wie das Nylo-App-Objekt, den EventBus und Authentifizierungsdaten zu speichern. Sie koennen es auch verwenden, um eigene Daten zu speichern, auf die schnell und ohne asynchrone Aufrufe zugegriffen werden soll.

import 'package:nylo_framework/nylo_framework.dart';

// Save a value
Backpack.instance.save("user_name", "Anthony");

// Read a value (synchronous)
String? name = Backpack.instance.read("user_name");

// Delete a value
Backpack.instance.delete("user_name");

Grundlegende Verwendung

Backpack verwendet das Singleton-Muster -- greifen Sie ueber Backpack.instance darauf zu:

// Save data
Backpack.instance.save("theme", "dark");

// Read data
String? theme = Backpack.instance.read("theme"); // "dark"

// Check if data exists
bool hasTheme = Backpack.instance.contains("theme"); // true

Daten lesen

Lesen Sie Werte aus Backpack mit der Methode read<T>(). Sie unterstuetzt generische Typen und einen optionalen Standardwert:

// Read a String
String? name = Backpack.instance.read<String>("name");

// Read with a default value
String name = Backpack.instance.read<String>("name", defaultValue: "Guest") ?? "Guest";

// Read an int
int? score = Backpack.instance.read<int>("score");

Backpack deserialisiert JSON-Strings automatisch zu Model-Objekten, wenn ein Typ angegeben wird:

// If a User model is stored as JSON, it will be deserialized
User? user = Backpack.instance.read<User>("current_user");

Daten speichern

Speichern Sie Werte mit der Methode save():

Backpack.instance.save("api_token", "abc123");
Backpack.instance.save("is_premium", true);
Backpack.instance.save("cart_count", 3);

Daten anfuegen

Verwenden Sie append(), um Werte zu einer Liste unter einem Schluessel hinzuzufuegen:

// Append to a list
Backpack.instance.append("recent_searches", "Flutter");
Backpack.instance.append("recent_searches", "Dart");

// Append with a limit (keeps only the last N items)
Backpack.instance.append("recent_searches", "Nylo", limit: 10);

Daten loeschen

Einzelnen Schluessel loeschen

Backpack.instance.delete("api_token");

Alle Daten loeschen

Die Methode deleteAll() entfernt alle Werte ausser den reservierten Framework-Schluesseln (nylo und event_bus):

Backpack.instance.deleteAll();

Sitzungen

Backpack bietet Sitzungsverwaltung zur Organisation von Daten in benannten Gruppen. Dies ist nuetzlich, um zusammengehoerige Daten gemeinsam zu speichern.

Sitzungswert aktualisieren

Backpack.instance.sessionUpdate("cart", "item_count", 3);
Backpack.instance.sessionUpdate("cart", "total", 29.99);

Sitzungswert abrufen

int? itemCount = Backpack.instance.sessionGet<int>("cart", "item_count"); // 3
double? total = Backpack.instance.sessionGet<double>("cart", "total"); // 29.99

Sitzungsschluessel entfernen

Backpack.instance.sessionRemove("cart", "item_count");

Gesamte Sitzung leeren

Backpack.instance.sessionFlush("cart");

Alle Sitzungsdaten abrufen

Map<String, dynamic>? cartData = Backpack.instance.sessionData("cart");
// {"item_count": 3, "total": 29.99}

Zugriff auf die Nylo-Instanz

Backpack speichert die Nylo-Anwendungsinstanz. Sie koennen sie wie folgt abrufen:

Nylo nylo = Backpack.instance.nylo();

Pruefen Sie, ob die Nylo-Instanz initialisiert wurde:

bool isReady = Backpack.instance.isNyloInitialized(); // true

Hilfsfunktionen

Nylo Website stellt globale Hilfsfunktionen fuer gaengige Backpack-Operationen bereit:

Funktion Beschreibung
backpackRead<T>(key) Einen Wert aus Backpack lesen
backpackSave(key, value) Einen Wert in Backpack speichern
backpackDelete(key) Einen Wert aus Backpack loeschen
backpackDeleteAll() Alle Werte loeschen (Framework-Schluessel bleiben erhalten)
backpackNylo() Die Nylo-Instanz aus Backpack abrufen

Beispiel

// Using helper functions
backpackSave("locale", "en");

String? locale = backpackRead<String>("locale"); // "en"

backpackDelete("locale");

// Access the Nylo instance
Nylo nylo = backpackNylo();

Integration mit NyStorage

Backpack laesst sich mit NyStorage fuer kombinierte persistente und In-Memory-Speicherung integrieren:

// Save to both NyStorage (persistent) and Backpack (in-memory)
await NyStorage.save("auth_token", "abc123", inBackpack: true);

// Now accessible synchronously via Backpack
String? token = Backpack.instance.read("auth_token");

// When deleting from NyStorage, also clear from Backpack
await NyStorage.deleteAll(andFromBackpack: true);

Dieses Muster ist nuetzlich fuer Daten wie Authentifizierungstoken, die sowohl Persistenz als auch schnellen synchronen Zugriff benoetigen (z. B. in HTTP-Interceptoren).

Beispiele

Auth-Token fuer API-Anfragen speichern

// In your auth interceptor
class BearerAuthInterceptor extends Interceptor {
  @override
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
    String? userToken = Backpack.instance.read(StorageKeysConfig.auth);

    if (userToken != null) {
      options.headers.addAll({"Authorization": "Bearer $userToken"});
    }

    return super.onRequest(options, handler);
  }
}

Sitzungsbasierte Warenkorbverwaltung

// Add items to a cart session
Backpack.instance.sessionUpdate("cart", "items", ["item_1", "item_2"]);
Backpack.instance.sessionUpdate("cart", "total", 49.99);

// Read cart data
Map<String, dynamic>? cart = Backpack.instance.sessionData("cart");

// Clear the cart
Backpack.instance.sessionFlush("cart");

Schnelle Feature-Flags

// Store feature flags in Backpack for fast access
backpackSave("feature_dark_mode", true);
backpackSave("feature_notifications", false);

// Check a feature flag
bool darkMode = backpackRead<bool>("feature_dark_mode") ?? false;