Reactive storage for Dart/Flutter. RxDart Storage for Dart/Flutter.
rx_shared_preferences is an extension of this package, check it out!
Author: Petrus Nguyễn Thái Học
Liked some of my work? Buy me a coffee (or more likely a beer).
-
It's a single-subscription
Stream
(ie. it can only be listened once). -
Stream
will emit the value (nullable) or aTypeError
as its first event when it is listen to. -
It will automatically emit value when value associated with key was changed successfully (emit
null
when value associated with key wasremoved
or set tonull
). -
When value read from Storage has a type other than expected type:
- If value is
null
, theStream
will emitnull
(this occurred becausenull
can be cast to any nullable type). - Otherwise, the
Stream
will emit aTypeError
.
- If value is
-
Can emit two consecutive data events that are equal. You should use Rx operator like
distinct
(More commonly known asdistinctUntilChanged
in other Rx implementations) to create anStream
where data events are skipped if they are equal to the previous data event.
Key changed: |----------K1---K2------K1----K1-----K2---------> time
|
Value stream: |-----@----@------------@-----@-----------------> time
| ^
| |
| Listen(key=K1)
|
| @: nullable value or TypeError
A simple usage example:
import 'package:rx_storage/rx_storage.dart';
class StorageAdapter implements Storage<String, void> { ... }
main() async {
final adapter = StorageAdapter();
final rxStorage = RxStorage<String, void>(adapter);
rxStorage.observe('key', (v) => v as String?).listen((String? s) { ... });
await rxStorage.write('key', 'a String', (v) => v);
await rxStorage.read('key', (v) => v as String?);
}
Please file feature requests and bugs at the issue tracker.