Flutter

[Flutter] workManager

devyong 2024. 8. 26. 20:05

https://pub.dev/packages/workmanager

 

백그라운드 작업을 처리하기 위해서는 workManager 패키지를 사용했다.

추후 homeWidget를 구현예정인데, homeWidget에서 백그라운드처리가 필요해보이므로 workManager를 사전에 구현한다.

 

@pragma('vm:entry-point') // Mandatory if the App is obfuscated or using Flutter 3.1+
void callbackDispatcher() {
  Workmanager().executeTask((task, inputData) {
    print("Native called background task: $task"); //simpleTask will be emitted here.
    return Future.value(true);
  });
}

void main() {
  Workmanager().initialize(
      callbackDispatcher, // The top level function, aka callbackDispatcher
      isInDebugMode: true // If enabled it will post a notification whenever the task is running. Handy for debugging tasks
  );
  Workmanager().registerOneOffTask("task-identifier", "simpleTask");
  runApp(MyApp());
}

 

main()에서 workManager를 사용하기위한 초기화를 진행한다. isInDebugMode값을 true로 할경우에는 테스트시 notification도 받을 수 있다.

 

registerOneOffTast의 매개변수로는 uniqueName, taskName이 들어가있는데, 메소드채널로 네이티브코드와 통신할때 동일한 Name이 있어야한다.

 

Flutter의 데이터를 네이티브코드가 읽기위해서는 sharedPreference를 사용하는것도 알아두어야한다.

 

백그라운드 작업이 발생할경우에 Workmanager.executeTask에 콜백이 발생한다!

 

 

IOS는 registerOneOffTask를 통해 작업을 시키는데, Android는 조금 다르다.

 

 

Android

workmanager().registerOnmeOffTask : 일회성 작업으로 한번만 실행된다.

workmanager().registerPeriodicTask : 주기적 작업으로 무기한 실행한다.

 

 

dart코드 처리는 끝났고, android, IOS 폴더 내에 작업이 필요하다. (아래 작업이 이루어져야 콜백이 작동한다.)

 

Android : https://github.com/fluttercommunity/flutter_workmanager/blob/main/ANDROID_SETUP.md

 

flutter_workmanager/ANDROID_SETUP.md at main · fluttercommunity/flutter_workmanager

A Flutter plugin which allows you to execute code in the background on Android and iOS. - fluttercommunity/flutter_workmanager

github.com

IOS : https://github.com/fluttercommunity/flutter_workmanager/blob/main/IOS_SETUP.md

 

flutter_workmanager/IOS_SETUP.md at main · fluttercommunity/flutter_workmanager

A Flutter plugin which allows you to execute code in the background on Android and iOS. - fluttercommunity/flutter_workmanager

github.com