I have been looking a lot for this but haven't found any packages or a way to schedule background tasks in Flutter. Like in Android there is WorkManager
,AlarmManager
.
I know I can access those classes using MethodChannel
, but I want something that works for iOS and Android both.
(Its very disappointing that a mobile framework doesn't have the ability to schedule background tasks).
What you want to do, i.e. cross-platform scheduling, is not a Flutter limitation. It is an iOS limitation. See this SO post which is referenced in this GitHub comment.
There is a Medium blogpost that explains how to do this.
However we thought it was way too complicated to set up so it just happens we created a plugin that aids you with this.
//Provide a top level function or static function.
//This function will be called by Android and will return the value you provided when you registered the task.
//See below
void callbackDispatcher() {
Workmanager.executeTask((task) {
print("Native echoed: $task");
return Future.value(true);
});
}
Workmanager.initialize(
callbackDispatcher, //the top level function.
isInDebugMode: true //If enabled it will post a notification whenever the job is running. Handy for debugging jobs
)
We support Android's Workmanager and iOS performFetch
For now it only works for Android project, but we are looking at iOS soon.
I'll update this answer when it is available.
We have iOS support now too. It is still early alpha, but give a go.
We wrote a complimentary Medium post too.
Would the Flutter Scheduler library help?
https://docs.flutter.io/flutter/scheduler/scheduler-library.html
Or maybe this plugin:
https://github.com/flutter/plugins/tree/master/packages/android_alarm_manager