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;