Как вызвать setState() внутри задачи плагина workmanager
Я использую плагин workmanager для выполнения фоновой задачи по запуску уведомления каждые 15 минут.
void main() async{
// needs to be initialized before using workmanager package
WidgetsFlutterBinding.ensureInitialized();
await NotificationApi.init();
// initialize Workmanager with the function which you want to invoke after any periodic time
Workmanager().initialize(callbackDispatcher);
// Periodic task registration
Workmanager().registerPeriodicTask(
"2",
// use the same task name used in callbackDispatcher function for identifying the task
// Each task must have a unique name if you want to add multiple tasks;
"myTask",
// When no frequency is provided the default 15 minutes is set.
// Minimum frequency is 15 min.
// Android will automatically change your frequency to 15 min if you have configured a lower frequency than 15 minutes.
frequency: Duration(minutes: 15), // change duration according to your needs
);
runApp(MyApp());
}
Вот функция верхнего уровня callbackdispatcher (), используемая workmanager каждые 15 минут.
void callbackDispatcher() {
Workmanager().executeTask((task, inputdata) async {
switch (task) {
case "myTask":
final notificationPlugin = FlutterLocalNotificationsPlugin();
var platformChannelSpecifics = new NotificationDetails(
android: AndroidNotificationDetails(
'your channel id',
'your channel name',
'your channel description',
importance: Importance.max,
priority: Priority.high,
additionalFlags: Int32List.fromList(<int>[4]),
),
iOS: IOSNotificationDetails()
);
await notificationPlugin.show(0, "Hello", "This is nottification", platformChannelSpecifics);
/* setState(() {
cStatus = false;
});*/
break;
case Workmanager.iOSBackgroundTask:
print("iOS background fetch delegate ran");
break;
}
//Return true when the task executed successfully or not
return Future.value(true);
});
}
Здесь уведомление успешно вызывается каждые 15 минут. Но я не могу вызвать функцию setState для восстановления виджета. Есть ли способ вызвать setstate внутри функции верхнего уровня. Потому что мне нужно перестроить виджет из фоновой задачи.