как получить доступ к одноэлементным объектам внутри обратного вызова Workmanager.executeTask с помощью flutter-workmanager

Создание List<String> mainList глобально и добавив один элемент в main()функция. Но внутри функции обратного вызова Workmanager.executeTask lenth mainList по-прежнему равен 0. Даже hashCode mainList отличается.

  • Почему это происходит?
  • Как сделать mainList как Singleton?
  • Пытался распечатать Isolate.current.debugName, это всегда «главный».
      List<String> mainList=[];
void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) {
    print("mainList.length=${mainList.length}"); // always length is 0
    print("Isolate.current.debugName = ${Isolate.current.debugName}");
    return Future.value(true);
  });
}

void main() {
  Workmanager.initialize(
    callbackDispatcher,
    isInDebugMode: true,
  );
  mainList.add("String1");
  print("mainList.length=${mainList.length}"); // length is 1
  print("Isolate.current.debugName = ${Isolate.current.debugName}");
  Workmanager.registerPeriodicTask("1", "simpleTask");
  runApp(MyApp());
}

1 ответ

В ListenableWorker.startWork() новый экземпляр FlutterEngin создается каждый раз и при выполнении Workmanager.executeTaskс callback.

Так что нет возможности использовать одноэлементные объекты.

BackgroundWorker.kt

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