rx_storage alt text
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
Pub Version Pub Version codecov Dart CI Hits License: MIT Style
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). -
Streamwill emit the value (nullable) or aTypeErroras its first event when it is listen to. -
It will automatically emit value when value associated with key was changed successfully (emit
nullwhen value associated with key wasremovedor set tonull). -
When value read from Storage has a type other than expected type:
- If value is
null, theStreamwill emitnull(this occurred becausenullcan be cast to any nullable type). - Otherwise, the
Streamwill emit aTypeError.
- If value is
-
Can emit two consecutive data events that are equal. You should use Rx operator like
distinct(More commonly known asdistinctUntilChangedin other Rx implementations) to create anStreamwhere 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.