1.패키지 추가
pubspec.yaml dependencies에 workmanager: ^0.2.3 패키지 추가
2.코드추가
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:workmanager/workmanager.dart';
void main() => runApp(MyApp());
const simpleTaskKey = "simpleTask";
const simpleDelayedTask = "simpleDelayedTask";
const simplePeriodicTask = "simplePeriodicTask";
const simplePeriodic1HourTask = "simplePeriodic1HourTask";
void callbackDispatcher() {
Workmanager.executeTask((task, inputData) async {
print('callback task:$task inputdata:$inputData');
switch (task) {
case simpleTaskKey:
print("$simpleTaskKey was executed");
break;
case simpleDelayedTask:
print("$simpleDelayedTask was executed");
break;
case simplePeriodicTask:
print("$simplePeriodicTask was executed");
break;
case simplePeriodic1HourTask:
print("$simplePeriodic1HourTask was executed");
break;
case Workmanager.iOSBackgroundTask:
print("The iOS background fetch was triggered");
break;
}
return Future.value(true);
});
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
enum _Platform { android, ios }
class PlatformEnabledButton extends RaisedButton {
final _Platform platform;
PlatformEnabledButton({
this.platform,
@required Widget child,
@required VoidCallback onPressed,
}) : assert(child != null, onPressed != null),
super(
child: child,
onPressed:
(Platform.isAndroid && platform == _Platform.android || Platform.isIOS && platform == _Platform.ios)
? onPressed
: null);
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Flutter WorkManager Example"),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text("Plugin initialization", style: Theme.of(context).textTheme.headline),
RaisedButton(
child: Text("Start the Flutter background service"),
onPressed: () {
Workmanager.initialize(
callbackDispatcher,
isInDebugMode: true, // true시 test알림메시지 전송
);
}),
SizedBox(height: 16),
Text("One Off Tasks (Android only)", style: Theme.of(context).textTheme.headline),
//This task runs once.
//Most likely this will trigger immediately
PlatformEnabledButton(
platform: _Platform.android,
child: Text("Register OneOff Task"),
onPressed: () {
Workmanager.registerOneOffTask(
"1",
simpleTaskKey,
);
}),
//This task runs once
//This wait at least 10 seconds before running
PlatformEnabledButton(
platform: _Platform.android,
child: Text("Register Delayed OneOff Task"),
onPressed: () {
Workmanager.registerOneOffTask(
"2",
simpleDelayedTask,
initialDelay: Duration(seconds: 10),
);
}),
SizedBox(height: 8),
Text("Periodic Tasks (Android only)", style: Theme.of(context).textTheme.headline),
//This task runs periodically
//It will wait at least 10 seconds before its first launch
//Since we have not provided a frequency it will be the default 15 minutes
PlatformEnabledButton(
platform: _Platform.android,
child: Text("Register Periodic Task"),
onPressed: () {
Workmanager.registerPeriodicTask(
"3",
simplePeriodicTask,
initialDelay: Duration(seconds: 10),
);
}),
//This task runs periodically
//It will run about every hour
PlatformEnabledButton(
platform: _Platform.android,
child: Text("Register 1 hour Periodic Task"),
onPressed: () {
Workmanager.registerPeriodicTask(
"5",
simplePeriodic1HourTask,
frequency: Duration(hours: 1),
);
}),
PlatformEnabledButton(
platform: _Platform.android,
child: Text("Cancel All"),
onPressed: () async {
await Workmanager.cancelAll();
print('Cancel all tasks completed');
},
),
],
),
),
),
);
}
}
'플러터&어플리케이션' 카테고리의 다른 글
flutter extension method (0) | 2021.02.06 |
---|---|
flutter android studio live templates (0) | 2021.01.29 |
flutter 상속, 추상 클래스, 믹스인 (0) | 2021.01.28 |
flutter firebase_admob 패키지 적용 (0) | 2021.01.23 |
flutter flutter_local_notifications 패키지 적용 (0) | 2021.01.23 |