
A Flutter hooks integration package for Jolt reactive state management. Jolt Hooks provides a comprehensive Hooks API built on flutter_hooks, enabling you to use Jolt's reactive primitives seamlessly within Flutter's hook system. All hooks automatically dispose their resources when the widget is removed from the tree, ensuring memory safety and preventing leaks.
- Unified API: All hooks use a consistent class-based API with method chaining for better extensibility
- Type-safe: Full type safety with Dart's type system
- Automatic disposal: All reactive resources are automatically cleaned up when widgets are disposed
- Comprehensive: Supports signals, computed values, effects, watchers, and reactive collections
- Flexible: Works seamlessly with both
HookWidget and HookBuilder patterns
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:jolt_hooks/jolt_hooks.dart';
import 'package:jolt_flutter/jolt_flutter.dart';
class CounterWidget extends HookWidget {
@override
Widget build(BuildContext context) {
final count = useSignal(0);
return Scaffold(
body: JoltBuilder(
builder: (context) => Text('Count: ${count.value}'),
),
floatingActionButton: FloatingActionButton(
onPressed: () => count.value++,
child: Icon(Icons.add),
),
);
}
}
class TodoListWidget extends HookWidget {
@override
Widget build(BuildContext context) {
final todos = useSignal.list<String>([]);
return Scaffold(
body: JoltBuilder(
builder: (context) => Column(
children: [
...todos.value.map((todo) => ListTile(title: Text(todo))),
ElevatedButton(
onPressed: () => todos.add('New Todo'),
child: Text('Add Todo'),
),
],
),
),
);
}
}
| Hook |
Description |
useSignal(value) |
Creates a reactive signal with initial value |
useSignal.lazy() |
Creates a lazy signal without initial value |
useSignal.list(value) |
Creates a reactive list signal |
useSignal.map(value) |
Creates a reactive map signal |
useSignal.set(value) |
Creates a reactive set signal |
useSignal.iterable(getter) |
Creates a reactive iterable signal |
useSignal.async(source) |
Creates an async signal for managing async operations |
useSignal.persist(initialValue, read, write) |
Creates a persistent signal with automatic storage |
| Hook |
Description |
useComputed(getter) |
Creates a computed signal that derives from dependencies |
useComputed.writable(getter, setter) |
Creates a writable computed signal |
useComputed.convert(source, decode, encode) |
Creates a type-converting computed signal |
| Hook |
Description |
useJoltEffect(fn, {lazy}) |
Creates a reactive effect that runs when dependencies change |
useJoltEffect.lazy(fn) |
Creates an effect that runs immediately upon creation |
| Hook |
Description |
useWatcher(sourcesFn, fn, {immediately, when}) |
Creates a watcher that observes specific sources |
useWatcher.immediately(sourcesFn, fn, {when}) |
Creates a watcher that executes immediately |
useWatcher.once(sourcesFn, fn, {when}) |
Creates a watcher that executes only once |
| Hook |
Description |
useEffectScope({fn}) |
Creates an effect scope for managing effect lifecycles |
useJoltStream(value) |
Creates a stream from a reactive value |
useJoltWidget(builder) |
Creates a reactive widget that rebuilds when dependencies change |
Jolt Hooks is part of the Jolt ecosystem. Explore these related packages:
| Package |
Description |
| jolt |
Core library providing Signals, Computed, Effects, and reactive collections |
| jolt_flutter |
Flutter widgets: JoltBuilder, JoltSelector, JoltProvider |
| jolt_surge |
Signal-powered Cubit pattern: Surge, SurgeProvider, SurgeConsumer |