Advanced

Backpack

Introduzione

Backpack e' un sistema di archiviazione singleton in memoria in Nylo Website. Fornisce un accesso rapido e sincrono ai dati durante l'esecuzione della tua app. A differenza di NyStorage che persiste i dati sul dispositivo, Backpack memorizza i dati in memoria e vengono cancellati quando l'app viene chiusa.

Backpack viene utilizzato internamente dal framework per memorizzare istanze critiche come l'oggetto app Nylo, EventBus e i dati di autenticazione. Puoi anche usarlo per memorizzare i tuoi dati che devono essere accessibili rapidamente senza chiamate asincrone.

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

Utilizzo Base

Backpack utilizza il pattern singleton -- accedi tramite 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

Lettura dei Dati

Leggi i valori da Backpack usando il metodo read<T>(). Supporta tipi generici e un valore predefinito opzionale:

// 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 deserializza automaticamente le stringhe JSON in oggetti modello quando viene fornito un tipo:

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

Salvataggio dei Dati

Salva i valori usando il metodo save():

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

Aggiunta di Dati

Usa append() per aggiungere valori a una lista memorizzata con una chiave:

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

Eliminazione dei Dati

Eliminare una Singola Chiave

Backpack.instance.delete("api_token");

Eliminare Tutti i Dati

Il metodo deleteAll() rimuove tutti i valori eccetto le chiavi riservate del framework (nylo e event_bus):

Backpack.instance.deleteAll();

Sessioni

Backpack fornisce la gestione delle sessioni per organizzare i dati in gruppi con nome. Questo e' utile per memorizzare dati correlati insieme.

Aggiornare un Valore di Sessione

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

Ottenere un Valore di Sessione

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

Rimuovere una Chiave di Sessione

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

Svuotare un'Intera Sessione

Backpack.instance.sessionFlush("cart");

Ottenere Tutti i Dati di Sessione

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

Accesso all'Istanza Nylo

Backpack memorizza l'istanza dell'applicazione Nylo. Puoi recuperarla usando:

Nylo nylo = Backpack.instance.nylo();

Verifica se l'istanza Nylo e' stata inizializzata:

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

Funzioni Helper

Nylo Website fornisce funzioni helper globali per le operazioni comuni di Backpack:

Funzione Descrizione
backpackRead<T>(key) Legge un valore da Backpack
backpackSave(key, value) Salva un valore in Backpack
backpackDelete(key) Elimina un valore da Backpack
backpackDeleteAll() Elimina tutti i valori (preserva le chiavi del framework)
backpackNylo() Ottiene l'istanza Nylo da Backpack

Esempio

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

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

backpackDelete("locale");

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

Integrazione con NyStorage

Backpack si integra con NyStorage per un'archiviazione combinata persistente + in memoria:

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

Questo pattern e' utile per dati come i token di autenticazione che necessitano sia della persistenza che di un accesso sincrono rapido (ad esempio, negli interceptor HTTP).

Esempi

Memorizzazione dei Token di Autenticazione per le Richieste 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);
  }
}

Gestione del Carrello Basata su Sessioni

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

Flag di Funzionalita' Rapidi

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