State management in Flutter has always been a hot topic. We have excellent tools like Bloc, Riverpod, Provider, MobX, and Signals. Each solves important problems, but building large-scale, offline-first, high-performance applications still comes with challenges:
- Too many widget rebuilds
- Boilerplate-heavy architectures
- Complex async and stream handling
- Manual lifecycle cleanup
- Difficult debugging and state tracing
Fluxy was created to simplify state management and UI composition. With the latest major update, Fluxy has evolved into a full reactive state management engine designed for performance, scalability, and developer happiness.
This release is the biggest architectural upgrade in Fluxy so far.
What is Fluxy?
Fluxy is a Flutter framework that combines:
- Reactive state management
- Declarative UI helpers
- Clean architecture primitives
- Performance-first design
Its goal is simple:
Make Flutter development faster, cleaner, and more predictable without sacrificing performance.
The Big Upgrade: Fluxy State Engine
Instead of relying on generic "signal" terminology, Fluxy now introduces its own branded, conflict-free reactive system.
This gives Fluxy a distinct identity while staying 100% backward compatible.
New Core State Units
| Concept | New Unit | Legacy Alias |
|---|---|---|
| Core State | Flux<T> |
Signal<T> |
| Derived State | FluxComputed<T> |
Computed<T> |
| Side Effects | FluxEffect |
Effect |
| Async State | AsyncFlux<T> |
AsyncSignal<T> |
| Persistence | PersistentFlux<T> |
PersistentSignal<T> |
| Collections |
FluxList, FluxMap
|
SignalList, SignalMap
|
All existing code using Signal, Computed, or Effect continues to work perfectly.
Simple Example
final count = flux(0);
final doubled = fluxComputed(() => count.value * 2);
Fx(() => Fx.text("Count: ${count.value}, Double: ${doubled.value}"));
Clean. Reactive. Minimal.
Solving Real Performance Problems
1. Atomic Rebuild Control with fluxSelector
One of the biggest pain points in Flutter is unnecessary widget rebuilds.
Fluxy now provides atomic state selection:
final userName = fluxSelector(userFlux, (u) => u.name);
Only widgets depending on userName rebuild when name changes, even if the rest of the user object updates.
Result: Faster UI, lower CPU usage, smoother animations.
2. Zero-Jank Background Processing with fluxWorker
Heavy computation on the UI thread leads to jank.
Fluxy introduces built-in isolate processing:
final processed = fluxWorker(heavyCalculation, data);
This automatically runs heavy logic in a background isolate.
Perfect for:
- Large list filtering
- JSON parsing
- Search indexing
- Image processing
Your UI remains smooth at 60 FPS.
3. Time Travel State with fluxHistory
Undo / Redo support is now built into the core engine:
final history = fluxHistory("");
This enables:
- Undo / redo operations
- Debugging workflows
- Advanced editing features
4. Automatic Lifecycle Cleanup with FluxyLocalMixin
Memory leaks are one of the hardest bugs to track.
Fluxy introduces automatic lifecycle management:
class _MyPageState extends State<MyPage> with FluxyLocalMixin {
late final counter = fluxLocal(0);
}
All local states are automatically disposed when the widget is destroyed.
No cleanup code. No memory leaks.
Offline-First & Multi-User Architecture
One of the most exciting additions is FluxyRepository.
This introduces an architectural layer that makes offline-first + multi-user applications easy and safe.
Example
class ChatRepository extends FluxyRepository {
late final messages = flux(
[],
persistKey: userScope(auth.userId, 'chat_history'),
);
void init() {
bindStream(database.watchMessages(), messages);
}
}
This gives you:
- Scoped persistence per user
- Database stream → reactive state binding
- Automatic cleanup on disposal
- Zero data leakage between users
Perfect for:
- Offline-first apps
- Chat applications
- Enterprise dashboards
- Multi-account business systems
Global Middleware Engine
Fluxy now supports global state middleware.
Fluxy.use(LoggerMiddleware());
This allows:
- Centralized logging
- Analytics integration
- Crash tracking
- State auditing
- Debug instrumentation
This is similar to middleware systems in Redux and backend frameworks.
State Hydration (Persistent Memory)
Fluxy now supports full state hydration.
void main() async {
await Fluxy.init();
runApp(MyApp());
}
This automatically:
- Restores persisted state
- Hydrates reactive memory
- Loads offline data before UI builds
Your app now has instant cold-start restoration.
Performance & Developer Tools
Advanced optimization tools added:
-
.peek()– Read state without triggering rebuilds -
untracked(() => ...)– Execute logic without dependency tracking -
batch(() { ... })– Batch multiple updates into a single rebuild
These allow fine-grained performance control for large applications.
Why Fluxy?
Fluxy is designed for developers who want:
- Clean mental model
- Minimal boilerplate
- Predictable state flow
- High performance
- Enterprise-grade architecture
It combines the best ideas from:
- Signals
- Bloc
- Riverpod
- Redux
- Reactive programming
Into a single, consistent developer experience.
Who Should Use Fluxy?
Fluxy is ideal for:
- Large Flutter applications
- Offline-first systems
- High-frequency UI updates
- Enterprise dashboards
- Complex business workflows
Links
- Documentation: https://fluxy-doc.vercel.app/
- Pub Package: https://pub.dev/packages/fluxy
Final Thoughts
Fluxy is no longer just another Flutter library. It is now a full reactive architecture engine designed for modern, high-performance Flutter applications.
If you are building complex apps and want fine-grained control, clean architecture, and smooth UI performance, Fluxy is worth exploring.
Top comments (0)