custom_workmanager 1.0.0
custom_workmanager: ^1.0.0 copied to clipboard
A custom wrapper over flutter_workmanager with progress/success callbacks and notifications
custom_workmanager #
A Flutter package that extends the capabilities of the workmanager package by providing a cleaner interface to register multiple background tasks with custom callbacks and parameters. Supports both Android and iOS platforms.
This package is ideal for developers who need more flexibility and modularity when scheduling background tasks in Flutter.
Features #
- Register multiple background tasks with unique identifiers.
- Support for periodic background tasks with input data.
- Simple and structured callback registration.
- Works on Android.
- Built on top of
workmanager
but offers a more scalable API. - Safe for production, with support for task isolation.
Getting Started #
Android Setup #
import 'package:custom_workmanager/custom_workmanager.dart';
Initializing
await WorkmanagerCustom.initialize(
onProgress: (name, progress) {
print('[PROGRESS] $name => $progress%');
},
onSuccess: (name, result) {
print('[SUCCESS] $name => $result');
},
onError: (name, error) {
print('[ERROR] $name => $error');
},
isInDebugMode: true,
);
WorkmanagerCustom.registerTaskHandler(
'printNumbersTask',
(task, input) async {
for (int i = 1; i <= 5; i++) {
await Future.delayed(const Duration(seconds: 2));
WorkmanagerCustom.reportProgress(task, i * 20);
await WorkmanagerCustom.showDebugNotification(
'Task Progress',
'Printing $i in $task',
);
}
return true;
},
);
For RegisterOneOffTask
await WorkmanagerCustom.registerOneOffTask(
'startupTask',
'printNumbersTask',
notificationTitle: 'Running Startup Task',
notificationBody: 'Printing 1 to 5 (Startup)...',
successTitle: 'Startup Task Done!',
successBody: 'Printed 1 to 5 on app launch.',
);
For RegisterPeriodicTask
await WorkmanagerCustom.registerPeriodicTask(
'periodicTask1',
'printNumbersTask',
frequency: const Duration(minutes: 15),
notificationTitle: 'Running Task',
notificationBody: 'Please wait...',
successTitle: 'Done!',
successBody: 'Task completed.',
networkType: MyNetworkType.connected,
requiresBatteryNotLow: true,
existingWorkPolicy: MyExistingWorkPolicy.keep,
outOfQuotaPolicy: MyOutOfQuotaPolicy.dropWorkRequest,
);
Android permissions #
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
min SDK: 21
In your pubspec.yaml
:
dependencies:
custom_workmanager:
permission_handler: (For Android 13+)