How to schedule background tasks in Flutter?

2020-02-09 02:28发布

问题:

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).

回答1:

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.



回答2:

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.



回答3:

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