A full-featured, embeddable support ticket UI for Flutter apps. Drop it into any Flutter project — get a complete customer-facing helpdesk with ticket management, knowledge base, guest access, and SLA tracking. Connects to the Escalated REST API.
One widget, full support experience. Wrap your app with EscalatedPlugin, point it at your API, and every screen is ready — login, tickets, knowledge base, guest access. Customize colors, auth behavior, and locale with a single config object.
- Ticket management — Create, view, filter, and reply to support tickets with file attachments
- Knowledge base — Searchable article list with HTML rendering for self-service support
- Guest tickets — Anonymous ticket submission without requiring authentication
- SLA tracking — Real-time SLA countdown timers on ticket detail views
- Satisfaction ratings — Post-resolution CSAT ratings with star display
- Auth hooks — Override login, logout, register, and token retrieval to integrate with your existing auth
- Riverpod state management — Auth, tickets, knowledge base, and theme providers out of the box
- GoRouter-compatible — Drop screens into your existing GoRouter navigation tree
- Dark mode — Full dark and light theme support with customizable primary color and border radius
- i18n — Localized in 4 languages (English, Spanish, French, German)
- Configurable — API base URL, auth hooks, primary color, border radius, dark mode, default locale
- Flutter 3.16+
- Dart 3.2+
- A running Escalated backend (Laravel, Rails, Django, AdonisJS, or WordPress)
Add the dependency to your pubspec.yaml:
dependencies:
escalated:
git:
url: https://github.com/escalated-dev/escalated-flutter.gitWrap your app with EscalatedPlugin:
import 'package:escalated/escalated.dart';
EscalatedPlugin(
config: EscalatedConfig(
apiBaseUrl: 'https://yourapp.com/support/api/v1',
),
child: MaterialApp.router(...),
)That's it — your app now has a full support ticket UI.
EscalatedConfig accepts the following options:
EscalatedConfig(
apiBaseUrl: 'https://yourapp.com/support/api/v1',
authHooks: myAuthHooks,
primaryColor: Color(0xFF4F46E5),
borderRadius: 12.0,
darkMode: false,
defaultLocale: 'en',
)| Option | Type | Default | Description |
|---|---|---|---|
apiBaseUrl |
String |
required | Base URL for the Escalated REST API |
authHooks |
EscalatedAuthHooks? |
null |
Custom auth hook overrides |
primaryColor |
Color? |
#4F46E5 |
Primary action color for buttons and accents |
borderRadius |
double? |
8.0 |
Border radius for cards, inputs, and buttons |
darkMode |
bool? |
false |
Enable dark theme |
defaultLocale |
String? |
'en' |
Default locale code (en, es, fr, de) |
| Screen | Description |
|---|---|
LoginScreen |
Email/password login form |
RegisterScreen |
New account registration |
TicketListScreen |
Paginated ticket list with status filters |
CreateTicketScreen |
New ticket form with file attachments |
TicketDetailScreen |
Full ticket thread with replies and metadata |
KBListScreen |
Knowledge base article listing |
KBArticleScreen |
Single article view with HTML rendering |
GuestCreateScreen |
Anonymous ticket submission |
GuestTicketScreen |
Guest ticket view via token |
SettingsScreen |
User preferences and locale selection |
TicketFiltersScreen |
Advanced ticket filter controls |
| Widget | Description |
|---|---|
StatusBadge |
Ticket status indicator |
PriorityBadge |
Priority level indicator |
SlaTimer |
SLA countdown display |
AttachmentList |
File attachment display |
FileDropzone |
Drag-and-drop file upload |
SatisfactionRating |
Star rating display and input |
ReplyThread |
Chronological message thread |
ReplyComposer |
Reply text input with attachments |
EmptyState |
Placeholder for empty lists |
LoadingShimmer |
Shimmer loading placeholder |
ErrorView |
Error state with retry action |
Escalated uses Riverpod for state management. Four providers are available:
| Provider | Description |
|---|---|
authProvider |
Authentication state, login/logout/register actions |
ticketsProvider |
Ticket list, creation, replies, and filtering |
kbProvider |
Knowledge base articles and search |
themeProvider |
Theme configuration (colors, dark mode, locale) |
Nine models with full fromJson / toJson serialization are included for use with the REST API. All models map directly to the Escalated API response format.
Auth hooks let you override default authentication behavior to integrate with your app's existing auth system:
EscalatedConfig(
apiBaseUrl: 'https://yourapp.com/support/api/v1',
authHooks: EscalatedAuthHooks(
onLogin: (email, password) async {
// Your custom login logic
return yourAuthToken;
},
onLogout: () async {
// Your custom logout logic
},
onRegister: (name, email, password) async {
// Your custom registration logic
return yourAuthToken;
},
getToken: () async {
// Return the current auth token
return await secureStorage.read(key: 'token');
},
),
)When no auth hooks are provided, Escalated uses its built-in Dio HTTP client with flutter_secure_storage for token persistence.
Escalated ships with translations for four languages:
| Code | Language |
|---|---|
en |
English |
es |
Spanish |
fr |
French |
de |
German |
Set the default locale via EscalatedConfig.defaultLocale or let users switch in the Settings screen.
| Package | Purpose |
|---|---|
dio |
HTTP client for API requests |
flutter_riverpod |
State management |
go_router |
Navigation and routing |
flutter_secure_storage |
Secure token persistence |
flutter_html |
HTML rendering for knowledge base articles |
shimmer |
Loading placeholder animations |
file_picker |
File selection for attachments |
image_picker |
Image selection for attachments |
intl |
Internationalization and date formatting |
| Framework | Package | Repository |
|---|---|---|
| Laravel | escalated-dev/escalated-laravel |
GitHub |
| Ruby on Rails | escalated (gem) |
GitHub |
| Django | escalated-django |
GitHub |
| AdonisJS | @escalated-dev/escalated-adonis |
GitHub |
| WordPress | escalated-wordpress |
GitHub |
| Vue UI | @escalated-dev/escalated |
GitHub |
| Flutter | escalated (Flutter) |
GitHub |
| React Native | @escalated-dev/escalated-react-native |
GitHub |
Same architecture, same REST API, same support experience — for every major framework.
MIT