Backpack
Pengantar
Backpack adalah sistem penyimpanan singleton dalam memori di Nylo Website. Backpack menyediakan akses data yang cepat dan sinkron selama runtime aplikasi Anda. Berbeda dengan NyStorage yang menyimpan data secara persisten di perangkat, Backpack menyimpan data di memori dan akan dihapus saat aplikasi ditutup.
Backpack digunakan secara internal oleh framework untuk menyimpan instance penting seperti objek aplikasi Nylo, EventBus, dan data autentikasi. Anda juga dapat menggunakannya untuk menyimpan data Anda sendiri yang perlu diakses dengan cepat tanpa panggilan asinkron.
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");
Penggunaan Dasar
Backpack menggunakan pola singleton -- akses melalui 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
Membaca Data
Baca nilai dari Backpack menggunakan metode read<T>(). Metode ini mendukung tipe generik dan nilai default opsional:
// 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 secara otomatis melakukan deserialisasi string JSON ke objek model ketika tipe disediakan:
// If a User model is stored as JSON, it will be deserialized
User? user = Backpack.instance.read<User>("current_user");
Menyimpan Data
Simpan nilai menggunakan metode save():
Backpack.instance.save("api_token", "abc123");
Backpack.instance.save("is_premium", true);
Backpack.instance.save("cart_count", 3);
Menambahkan Data
Gunakan append() untuk menambahkan nilai ke daftar yang tersimpan pada sebuah key:
// 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);
Menghapus Data
Menghapus Satu Key
Backpack.instance.delete("api_token");
Menghapus Semua Data
Metode deleteAll() menghapus semua nilai kecuali key framework yang dicadangkan (nylo dan event_bus):
Backpack.instance.deleteAll();
Sesi
Backpack menyediakan manajemen sesi untuk mengorganisir data ke dalam grup bernama. Ini berguna untuk menyimpan data yang saling terkait secara bersamaan.
Memperbarui Nilai Sesi
Backpack.instance.sessionUpdate("cart", "item_count", 3);
Backpack.instance.sessionUpdate("cart", "total", 29.99);
Mendapatkan Nilai Sesi
int? itemCount = Backpack.instance.sessionGet<int>("cart", "item_count"); // 3
double? total = Backpack.instance.sessionGet<double>("cart", "total"); // 29.99
Menghapus Key Sesi
Backpack.instance.sessionRemove("cart", "item_count");
Mengosongkan Seluruh Sesi
Backpack.instance.sessionFlush("cart");
Mendapatkan Semua Data Sesi
Map<String, dynamic>? cartData = Backpack.instance.sessionData("cart");
// {"item_count": 3, "total": 29.99}
Mengakses Instance Nylo
Backpack menyimpan instance aplikasi Nylo. Anda dapat mengambilnya menggunakan:
Nylo nylo = Backpack.instance.nylo();
Memeriksa apakah instance Nylo sudah diinisialisasi:
bool isReady = Backpack.instance.isNyloInitialized(); // true
Fungsi Helper
Nylo Website menyediakan fungsi helper global untuk operasi Backpack yang umum:
| Fungsi | Deskripsi |
|---|---|
backpackRead<T>(key) |
Membaca nilai dari Backpack |
backpackSave(key, value) |
Menyimpan nilai ke Backpack |
backpackDelete(key) |
Menghapus nilai dari Backpack |
backpackDeleteAll() |
Menghapus semua nilai (mempertahankan key framework) |
backpackNylo() |
Mendapatkan instance Nylo dari Backpack |
Contoh
// Using helper functions
backpackSave("locale", "en");
String? locale = backpackRead<String>("locale"); // "en"
backpackDelete("locale");
// Access the Nylo instance
Nylo nylo = backpackNylo();
Integrasi dengan NyStorage
Backpack terintegrasi dengan NyStorage untuk penyimpanan gabungan persisten + dalam memori:
// 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);
Pola ini berguna untuk data seperti token autentikasi yang membutuhkan baik persistensi maupun akses sinkron yang cepat (misalnya, di HTTP interceptor).
Contoh
Menyimpan Token Auth untuk Permintaan 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);
}
}
Manajemen Keranjang Berbasis Sesi
// 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");
Feature Flag Cepat
// 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;