Advanced

Backpack

Introduction

Backpack est un systeme de stockage singleton en memoire dans Nylo Website. Il offre un acces rapide et synchrone aux donnees pendant l'execution de votre application. Contrairement a NyStorage qui persiste les donnees sur l'appareil, Backpack stocke les donnees en memoire et les efface lorsque l'application est fermee.

Backpack est utilise en interne par le framework pour stocker des instances critiques comme l'objet Nylo, l'EventBus et les donnees d'authentification. Vous pouvez egalement l'utiliser pour stocker vos propres donnees qui doivent etre accessibles rapidement sans appels asynchrones.

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");

Utilisation de base

Backpack utilise le patron singleton -- accedez-y via Backpack.instance :

// 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

Lire des donnees

Lisez des valeurs depuis Backpack en utilisant la methode read<T>(). Elle prend en charge les types generiques et une valeur par defaut optionnelle :

// 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 deserialise automatiquement les chaines JSON en objets modele lorsqu'un type est fourni :

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

Enregistrer des donnees

Enregistrez des valeurs en utilisant la methode save() :

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

Ajouter des donnees

Utilisez append() pour ajouter des valeurs a une liste stockee sous une cle :

// 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);

Supprimer des donnees

Supprimer une cle unique

Backpack.instance.delete("api_token");

Supprimer toutes les donnees

La methode deleteAll() supprime toutes les valeurs sauf les cles reservees du framework (nylo et event_bus) :

Backpack.instance.deleteAll();

Sessions

Backpack fournit une gestion de sessions pour organiser les donnees en groupes nommes. Cela est utile pour stocker des donnees liees ensemble.

Mettre a jour une valeur de session

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

Obtenir une valeur de session

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

Supprimer une cle de session

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

Vider une session entiere

Backpack.instance.sessionFlush("cart");

Obtenir toutes les donnees d'une session

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

Acceder a l'instance Nylo

Backpack stocke l'instance de l'application Nylo. Vous pouvez la recuperer en utilisant :

Nylo nylo = Backpack.instance.nylo();

Verifiez si l'instance Nylo a ete initialisee :

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

Fonctions utilitaires

Nylo Website fournit des fonctions utilitaires globales pour les operations courantes de Backpack :

Fonction Description
backpackRead<T>(key) Lire une valeur depuis Backpack
backpackSave(key, value) Enregistrer une valeur dans Backpack
backpackDelete(key) Supprimer une valeur de Backpack
backpackDeleteAll() Supprimer toutes les valeurs (preserve les cles du framework)
backpackNylo() Obtenir l'instance Nylo depuis Backpack

Exemple

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

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

backpackDelete("locale");

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

Integration avec NyStorage

Backpack s'integre avec NyStorage pour un stockage combine persistant + en memoire :

// 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);

Ce patron est utile pour des donnees comme les jetons d'authentification qui necessitent a la fois la persistance et un acces synchrone rapide (par exemple, dans les intercepteurs HTTP).

Exemples

Stocker des jetons d'authentification pour les requetes API

// 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);
  }
}

Gestion de panier basee sur les sessions

// 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");

Drapeaux de fonctionnalites rapides

// 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;