🎉 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!