Как вызвать 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 внутри функции верхнего уровня. Потому что мне нужно перестроить виджет из фоновой задачи.

0 ответов

Другие вопросы по тегам