An open API service indexing awesome lists of open source software.

https://github.com/solid-software/hydrated

🚰 A BehaviorSubject for Flutter with automatic persist and hydrate.
https://github.com/solid-software/hydrated

Last synced: 9 months ago
JSON representation

🚰 A BehaviorSubject for Flutter with automatic persist and hydrate.

Awesome Lists containing this project

README

          

# Hydrated

[![Version](https://img.shields.io/pub/v/hydrated)](https://pub.dev/packages/hydrated)
[![Build](https://img.shields.io/github/workflow/status/lukepighetti/hydrated/Flutter)](https://github.com/lukepighetti/hydrated/actions?query=Flutter)
[![License](https://img.shields.io/github/license/lukepighetti/hydrated)](https://opensource.org/licenses/MIT)
[![style: solid](https://img.shields.io/badge/style-solid-orange)](https://pub.dev/packages/solid_lints)

Hydrated provides a Subject that automatically persists to Flutter's local storage and hydrates on creation!

## Easy to consume

All values are persisted with `shared_preferences` and restored with automatic hydration.

```dart
final count$ = HydratedSubject("count", seedValue: 0);

/// count$ will automagically be hydrated with 42 next time it is created
count$.add(42);
```

## Ready for BLoC

```dart
class HydratedBloc {
final _count$ = HydratedSubject("count", seedValue: 0);

ValueObservable get count$ => _count$.stream;
Sink get setCount => _count$.sink;

dispose() {
_count$.close();
}
}
```

## Supports simple types and serialized classes

We support all `shared_preferences` types.

- `int`
- `double`
- `bool`
- `String`
- `List`

```dart
final count$ = HydratedSubject("count");
```

We also support serialized classes with `hydrate` and `persist` arguments.

```dart
final user$ = HydratedSubject(
"user",
hydrate: (String s) => User.fromJson(s),
persist: (User user) => user.toJson(),
);
```

## Reliable

Hydrated is mock tested with all supported types and is dogfooded by its creator.

## Extensible

Hydrated supports any key-value data storages -- just implement the `KeyValueStore` interface
and you will be able to use *hive*, *flutter_secure_storage* or any other persistence solution of your choice.

```dart
class MyAwesomeKeyValueStore implements KeyValueStore {
/// your implementation here...
}

final user = HydratedSubject(
"user",
hydrate: (String s) => User.fromJson(s),
persist: (User user) => user.toJson(),
keyValueStore: MyAwesomeKeyValueStore()
);
```

## Demo

demo of Hydrated BehaviorSubject between app restarts

## Original developer

`hydrated` was originally developed by [@lukepighetti](https://github.com/lukepighetti).