如何使用 flutter-workmanager 在 Workmanager.executeTask 的回调中访问单例对象
how to access singleton objects inside Workmanager.executeTask's callback using flutter-workmanager
正在全局创建 List<String> mainList
并在 main()
函数中添加一项。但是在Workmanager.executeTask的回调里面,mainList的lenth还是0。连mainList的hashCode都不一样了。
- 为什么会这样?
- 如何将mainList设为单例?
- 尝试打印
Isolate.current.debugName
,它总是 'main'。
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());
}
在ListenableWorker.startWork()
中,每次都会创建一个新的FlutterEngin实例并执行Workmanager.executeTask
的callback
。
所以无法使用单例对象。
正在全局创建 List<String> mainList
并在 main()
函数中添加一项。但是在Workmanager.executeTask的回调里面,mainList的lenth还是0。连mainList的hashCode都不一样了。
- 为什么会这样?
- 如何将mainList设为单例?
- 尝试打印
Isolate.current.debugName
,它总是 'main'。
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());
}
在ListenableWorker.startWork()
中,每次都会创建一个新的FlutterEngin实例并执行Workmanager.executeTask
的callback
。
所以无法使用单例对象。