state_pulse 0.0.5
state_pulse: ^0.0.5 copied to clipboard
Lightweight reactive & persistent state management for Flutter.
[assets/statepulse_logo.png]
StatePulse
A lightweight, reactive, hydrated state-management library for Flutter โ inspired by Provider + Hydrated Bloc, but 10ร simpler.
๐ Features #
- ๐ Simple API โ only a few core classes
- ๐ฅ Ultra-fast UI updates (InheritedNotifier + AnimatedBuilder)
- ๐พ Built-in hydration using
HydratedStatePulse - ๐ฏ Selectors, Listeners, and Consumers (like Bloc/Provider)
- ๐งฉ Supports local store instances (per-widget state)
- โก Zero boilerplate
- ๐ฆ Zero dependencies (only
shared_preferencesfor persistence) - ๐ง Designed for small โ large production apps
๐ฆ Install #
dependencies:
state_pulse: ^0.0.5
๐งฉ Quick Start Example
- Create a Store class CounterStore extends ChangeNotifier with HydratedStatePulse { int value = 0;
void increment() { value++; notifyListeners(); }
@override String get storageKey => 'counter_store';
@override Map<String, dynamic> toJson() => {'value': value};
@override void fromJson(Map<String, dynamic> json) { value = json['value'] ?? 0; } }
-
Provide the Store StatePulseProvider( store: CounterStore(), child: MyApp(), );
-
Use With Builder StatePulseBuilder
๐ฏ Selector Example (High Performance Rebuilds)
Only rebuilds when the selected value changes.
StatePulseSelector<CounterStore, int>( selector: (store) => store.value, builder: (_, value) => Text('$value'), );
๐ Listener Example (Side-effects โ No UI Rebuild) StatePulseListener
๐ Consumer Example (Listener + Builder) StatePulseConsumer
๐งช Local Store Instance (Widget-Scoped State)
Each widget has its own isolated store:
final localStore = CounterStore();
StatePulseBuilder
๐ง Advanced Example โ Hydrated User Store class UserStore extends ChangeNotifier with HydratedStatePulse { UserModel? user; bool loading = false;
Future
@override String get storageKey => "user_store";
@override Map<String, dynamic> toJson() => user == null ? {} : {"user": user!.toJson()};
@override void fromJson(Map<String, dynamic> json) { if (json["user"] != null) { user = UserModel.fromJson(json["user"]); } } }
๐ Folder Structure state_pulse/ โโ assets/ โ โโ statepulse_logo.png โโ lib/ โ โโ state_pulse.dart โ โโ src/ โ โ โโ hydrated_state_pulse.dart โ โ โโ state_pulse_provider.dart โ โ โโ state_pulse_builder.dart โ โ โโ state_pulse_selector.dart โ โ โโ state_pulse_listener.dart โ โ โโ state_pulse_consumer.dart โโ example/ โโ CHANGELOG.md โโ README.md โโ pubspec.yaml