Releases: fluttercommunity/flutter_workmanager
v0.9.0 - Hook-Based Debug System
🎉 Major Release - Hook-Based Debug System
This release introduces a major upgrade to the debugging experience with an extensible hook-based system, eliminating the risk of debug notifications appearing in production apps while providing better task lifecycle visibility.
🚨 Breaking Changes
Debug System Changes
isInDebugMode
parameter is deprecated inWorkmanager().initialize()
- Parameter still accepted but will be removed in future version
- Replace with hook-based debug system using
WorkmanagerDebug.setCurrent()
- iOS minimum deployment target increased to 14.0
- Update your iOS project's deployment target to 14.0+
- Required for notification debug handlers (iOS 14+ notification permissions)
registerPeriodicTask
now usesExistingPeriodicWorkPolicy
- Replace
ExistingWorkPolicy
parameter withExistingPeriodicWorkPolicy
- Replace
✨ New Features
Hook-Based Debug System
NotificationDebugHandler
- Shows task status as notifications with configurable channelsLoggingDebugHandler
- Writes task events to system log- Eliminates production risks - Debug notifications only appear when explicitly enabled by developers
- Configurable notification channels and grouping for better organization on Android
Enhanced Task Lifecycle Tracking
TaskStatus.SCHEDULED
- Tasks are now tracked when first scheduledTaskStatus.RESCHEDULED
- Better visibility into task retry behavior- Improved notification flow: Started → Rescheduled → Retrying → Success
🐛 Bug Fixes
- Fixed periodic tasks running at wrong frequency when re-registered (#622)
- Changed default policy from
KEEP
toUPDATE
UPDATE
ensures new task configurations replace existing ones
- Changed default policy from
- Fixed crash when inputData contains null values (thanks @Dr-wgy)
- Fixed Android retry detection using
runAttemptCount
to properly identify retrying tasks - Fixed crash when background task callback is null (thanks @jonathanduke, @Muneeza-PT)
📈 Improvements
- Updated androidx.work from 2.9.0 to 2.10.2 for better stability
- Cleaner notification icons using modern symbols (
▶️ ✅ ❌ 🔄 ⏹️ 📅) - Better error handling - Removed duplicate exception notifications for normal task failures
- Example app improvements with proper package naming and AndroidManifest structure
🙏 Contributors
Special thanks to @Dr-wgy, @jonathanduke, @Muneeza-PT, and all contributors who helped identify and resolve critical issues!
📦 Published Packages
v0.8.0 - Federated Plugin Architecture
🎉 Major Release - Federated Plugin Architecture
This release represents a major architectural change to the flutter_workmanager plugin, migrating to a federated plugin structure for better platform extensibility and maintainability.
🚨 Breaking Changes
Architecture Changes
- Migrated to federated plugin architecture - Platform-specific implementations are now in separate packages:
workmanager_platform_interface
- Shared platform interfaceworkmanager_android
- Android WorkManager implementationworkmanager_apple
- iOS BGTaskScheduler implementation (renamed from workmanager_ios)workmanager
- Main package with unified API
API Changes
- Enum values changed from snake_case to camelCase for Dart conventions:
NetworkType
:not_required
→notRequired
,not_roaming
→notRoaming
OutOfQuotaPolicy
:run_as_non_expedited_work_request
→runAsNonExpeditedWorkRequest
,drop_work_request
→dropWorkRequest
- Removed JSON serialization for inputData - Now uses native Map transfer for better performance and type safety
- Android: Stricter payload type validation - only primitive types and lists of strings supported
✨ New Features
- Android: Added
isScheduledByUniqueName
method to check if a periodic task is scheduled - Foundation for future macOS support using NSBackgroundActivityScheduler
- Added comprehensive integration tests for data transfer and retry functionality
🐛 Bug Fixes
- iOS: Fixed
initialDelaySeconds
parameter handling - was previously ignored - iOS: Fixed swapped constraints bug for requiresNetworkConnectivity and requiresExternalPower (#562)
- iOS: Fixed compilation errors with Map handling
- Android: Fixed NullPointerException when
isInDebugMode
was not properly initialized - Android: Fixed v2 embedding import in BackgroundWorker (#595)
- Android: Fixed array/list handling in payload processing
- Fixed input data type handling across platforms - now properly supports all primitive types and lists
📈 Improvements
- Updated to Flutter 3.32 and flutter_lints 6.0.0
- Android: Updated target SDK to 35
- iOS: Added Privacy Manifest for App Store compliance (#555)
- iOS: Replaced print statements with proper os_log for better logging
- iOS:
printScheduledTasks
now returns String instead of void (#585) - Improved CI/CD with Android emulator caching for faster builds
- Better error handling and type safety throughout the codebase
🙏 Contributors
Special thanks to @thegriffen, @jogapps, @navaronbracke, @yarith28, and all contributors who helped make this release possible!
📦 Published Packages
workmanager v0.7.0
🚀 Major Modernization Release
Breaking Changes
- Minimum Dart SDK: 3.2.0 (was 3.1.2)
- Minimum Flutter SDK: 3.16.0 (was 2.5.0)
- Minimum iOS deployment: 13.0 (was 10.0)
Major Updates
- Android: AGP 8.10.1, Gradle 8.11.1, Kotlin 2.1.0, SDK 35, NDK 27.0, Java 17
- iOS: Swift 5.0, deployment target 13.0
- CI/CD: Modernized GitHub Actions with caching, iPhone 15, Android API 34
- Dependencies: Latest dev dependencies, fixed win32 compatibility
See CHANGELOG.md for full details.
This release brings the plugin up to current Flutter/Dart standards while maintaining all existing functionality.