https://github.com/flutter-dart-open-source/rx_storage
Reactive storage for Dart/Flutter. RxDart Storage for Dart/Flutter.
https://github.com/flutter-dart-open-source/rx_storage
dart dart-reactive-storage dart-rx-storage flutter-reactive flutter-reactive-storage flutter-rx-preferences flutter-rx-storage flutter-rxdart reactive-storage rx-shared-preferences rx-storage rxdart rxdart-bloc rxdart-flutter rxstorage
Last synced: 11 days ago
JSON representation
Reactive storage for Dart/Flutter. RxDart Storage for Dart/Flutter.
- Host: GitHub
- URL: https://github.com/flutter-dart-open-source/rx_storage
- Owner: Flutter-Dart-Open-Source
- License: mit
- Created: 2020-11-13T08:46:42.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2025-04-14T21:52:42.000Z (18 days ago)
- Last Synced: 2025-04-14T22:34:53.145Z (18 days ago)
- Topics: dart, dart-reactive-storage, dart-rx-storage, flutter-reactive, flutter-reactive-storage, flutter-rx-preferences, flutter-rx-storage, flutter-rxdart, reactive-storage, rx-shared-preferences, rx-storage, rxdart, rxdart-bloc, rxdart-flutter, rxstorage
- Language: Dart
- Homepage: https://github.com/hoc081098
- Size: 171 KB
- Stars: 9
- Watchers: 2
- Forks: 2
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
README
# rx_storage 
Reactive storage for Dart/Flutter. RxDart Storage for Dart/Flutter.
## [rx_shared_preferences](https://github.com/hoc081098/rx_shared_preferences) is an extension of this package, check it out!
## Author: [Petrus Nguyễn Thái Học](https://github.com/hoc081098)
[](https://pub.dev/packages/rx_storage)
[](https://pub.dev/packages/rx_storage)
[](https://codecov.io/gh/Flutter-Dart-Open-Source/rx_storage)
[](https://github.com/Flutter-Dart-Open-Source/rx_storage/actions/workflows/dart.yml)
[](https://hits.seeyoufarm.com)
[](https://opensource.org/licenses/MIT)
[](https://pub.dev/packages/lints)
![]()
Liked some of my work? Buy me a coffee (or more likely a beer).
## More detail about returned `Stream`
- It's a **single-subscription `Stream`** (ie. it can only be listened once).
- `Stream` will emit the **value (nullable)** or **a `TypeError`** 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 was `removed` or set to `null`).- When value read from Storage has a type other than expected type:
- If value is `null`, the `Stream` will **emit `null`** (this occurred because `null` can be cast to any nullable type).
- Otherwise, the `Stream` will **emit a `TypeError`**.- **Can emit** two consecutive data events that are equal. You should use Rx operator like `distinct` (More commonly known as `distinctUntilChanged` in other Rx implementations) to create an `Stream` where data events are skipped if they are equal to the previous data event.
```text
Key changed: |----------K1---K2------K1----K1-----K2---------> time
|
Value stream: |-----@----@------------@-----@-----------------> time
| ^
| |
| Listen(key=K1)
|
| @: nullable value or TypeError
```
## UsageA simple usage example:
```dart
import 'package:rx_storage/rx_storage.dart';class StorageAdapter implements Storage { ... }
main() async {
final adapter = StorageAdapter();
final rxStorage = RxStorage(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?);
}
```## Features and bugs
Please file feature requests and bugs at the [issue tracker][tracker].
[tracker]: https://github.com/Flutter-Dart-Open-Source/rx_storage/issues