Complete working demo showing all Flutter Workmanager features and task types.
- One-off tasks: Immediate background execution
- Periodic tasks: Scheduled recurring background work
- Processing tasks: Long-running iOS background tasks
- Task constraints: Network, battery, and device state requirements
- Debug notifications: Visual feedback when tasks execute
- Error handling: Proper task success/failure/retry logic
- Platform differences: Android vs iOS background execution
-
Clone and run:
git clone https://github.com/fluttercommunity/flutter_workmanager.git cd flutter_workmanager/example flutter run -
Platform setup:
- Android: Works immediately ✅
- iOS: Follow the iOS setup in
ios/Runner/AppDelegate.swiftandios/Runner/Info.plist
-
Test background tasks:
- Tap buttons to schedule different task types
- Put app in background to see tasks execute
- Check debug notifications to verify execution
The demo includes practical examples:
- Simulated API sync: Fetches data and stores locally
- File cleanup: Removes old cached files
- Periodic maintenance: Regular app maintenance tasks
- Long processing: iOS-specific long-running tasks
lib/main.dart- Main app with task scheduling UIlib/callback_dispatcher.dart- Background task execution logicios/Runner/AppDelegate.swift- iOS background task registrationios/Runner/Info.plist- iOS background modes configuration
Android:
- Tasks run reliably in background
- Enable debug mode to see notifications
- Use
adb shell dumpsys jobschedulerto inspect scheduled tasks
iOS:
- Test on physical device (not simulator)
- Enable Background App Refresh in Settings
- Use Xcode debugger commands to trigger tasks immediately
For detailed guides and real-world use cases, visit: docs.page/fluttercommunity/flutter_workmanager →
Run flutter run -d chrome (or flutter build web and serve over HTTPS or
localhost) to get the web-only demo. It demonstrates the experimental
workmanager_web package with a simulated weather watch — no network
and no API keys needed:
- Two-way worker messaging — the page and the background worker talk
over
postMessage(Chat tab). Tap "Watch Cardiff" and the worker streams simulated temperatures, alerting when it drops below the threshold; type any text and it echoes back. Page → worker viasendMessageToWorker(), worker → page viasendToPage()(surfaced onWorkmanagerWeb.workerMessages). - Background tasks in a Web Worker — register one-off / periodic tasks and watch them execute off the main thread (the UI stays responsive while the task's CPU loop runs). "Run check now" fires a one-off task; a periodic temperature check is registered automatically every 15 minutes. Results appear in the Task log tab.
- Service Worker execution + notifications — install the PWA, allow notifications, close the tab, trigger Periodic Background Sync from DevTools and reopen: the task ran inside the Service Worker (compiled Dart dispatcher) and showed a notification while the tab was closed; the result is replayed from IndexedDB into the event log on the next load.
The demo has a Guide tab that walks through all of this step by step.
The background handler lives in lib/web/background_tasks.dart — a
Flutter-free file compiled with plain dart compile js into
web/background.dart.js (see tool/build_web_background.sh). Temperatures
are simulated so the demo works offline; swap _simulatedTemp() for a real
fetch to see the same pattern with live data.
lib/main.dart- Main app with task scheduling UIlib/web/- Web-only demo (Flutter-free dispatcher, worker chat, PWA install glue)lib/callback_dispatcher.dart- Background task execution logicios/Runner/AppDelegate.swift- iOS background task registrationios/Runner/Info.plist- iOS background modes configuration