问题描述
全局创建 List<String> mainList
并在 main()
函数中添加一项。但是在Workmanager.executeTask的回调里面,mainList的lenth还是0,就连mainList的hashCode也不一样。
- 为什么会这样?
- 如何将 mainList 设为 Singleton?
- 尝试打印
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
。
所以无法使用单例对象。