kvsql 0.3.0 kvsql: ^0.3.0 copied to clipboard
A type safe key/value store backed by Sqlite. It has methods to handle high throughput updates.
Kvsql #
A type safe key/value store for Flutter backed by Sqlite. Powered by Sqlcool.
Usage #
Initialize #
import 'package:kvsql/kvsql.dart';
store = KvStore();
await store.onReady;
Initialize with an existing Sqlcool database:
import 'package:kvsql/kvsql.dart';
import 'package:sqlcool/sqlcool.dart';
final db = Db();
await db.init(path: "mydb.db", schema=[kvSchema()]);
store = KvStore(db: db);
Insert or update #
await store.put<String>("mykey", "myvalue");
Supported value types are: String
, int
, double
, bool
, List<T>
, Map<K, V>
Allowed types for map keys are: String
, int
and double
Allowed types for lists and maps values are String
, int
, bool
, double
and dynamic
Delete #
await store.delete("mykey");
Select #
Returns a typed value
final List<int> myValue = await store.select<List<int>>("mykey");
Select sync #
Synchronously select a value.
final Map<String, int> myValue = store.selectSync<Map<String, int>>("mykey");
For this to work you need to initialize the store with the inMemory
option that keeps an in memory copy of the store values.
store = KvStore(inMemory = true);
Push #
This method upserts a key/value using a queue: it can be safely called concurrently. Useful for high throughput updates.
store.push("mykey", "my_value");
Limitations:
- This method is executed asynchronously but can not be awaited
- It does not control the type of the data
Note: if you don't await your mutations or use push
you are exposed to
eventual consistency
Check the examples for detailled usage.
Persistant state #
The kvstore can be used to persist the app state. Example with provider:
import 'package:flutter/foundation.dart';
import 'package:kvsql/kvsql.dart';
final stateStore =
KvStore(inMemory: true, path: "stateStore.db");
class AppState with ChangeNotifier {
int get value => stateStore.selectSync<int>("value");
set value(int v) => stateStore.put<int>("value", v);
void updateValue(int val) {
value = val;
notifyListeners();
}
}