What is Presentum?
Presentum is a declarative Flutter engine for building dynamic, conditional UI at scale. It helps you manage campaigns, app updates, special offers, tips, notifications, and more with clean, testable, type-safe code. Instead of spreading show/hide logic across your widgets, you describe what should be shown as data, and Presentumβs engine, guards, and outlets handle where, when, and how it appears.The problem
Managing presentations imperatively with scattered show/hide logic leads to boilerplate and scaling issues:The solution
Presentum separates what (payloads), when (guards), where (surfaces), and how (outlets):All eligibility logic is centralized. The outlet renders. The payload is
data. Guards contain business rules. Everything is testable.
When to use Presentum
Perfect for
- Marketing campaigns and banners
- App update notifications (Shorebird, CodePush)
- Special offers with discount codes
- Onboarding tips and tutorials
- Feature announcements
- System maintenance alerts
- User-targeted messaging
- A/B testing content
Not designed for
- Navigation/routing (use GoRouter, AutoRoute)
- Layout management (use Flutter widgets)
- General app state (use Riverpod, BLoC)
- Real-time chat messages
- Transient toasts/snackbars
What Presentum handles
Presentum can evaluate ANY condition you need:- User segments (premium, free, trial)
- Geographic location (country, region, city)
- App version (force update for old versions)
- Device type (phone, tablet, platform)
- OS type (iOS, Android, Web)
- User behavior (purchase history, usage patterns)
- Time-based rules (holidays, business hours, date ranges)
- A/B test groups
- Feature flags
- Custom business logic
How it works
Presentum coordinates the flow between your data sources, eligibility rules, and UI:1
Fetch candidates
Your app fetches presentations from Firebase Remote Config, APIs, or local
sources.
2
Feed to engine
Convert to items and feed to Presentum using
setCandidates or
setCandidatesWithDiff.3
Guards process
Engine runs all guards in sequence to determine eligibility, apply rules,
and update state.
4
State committed
New state is committed and observers are notified.
5
Outlets rebuild
Outlets watching affected surfaces rebuild with new active items.
6
User interacts
User dismisses or converts, which records to storage and may trigger guard
re-evaluation.
Key concepts
1
Surfaces
2
Payloads
3
Guards
4
Outlets
Production example
Hereβs a real-world implementation from a production app:Next steps
Quickstart
Build your first presentation in 5 minutes
Core concepts
Understand the architecture
Production example
See real-world implementation
API reference
Complete API documentation