异步函数在 WorkManager 中无法正常工作

4

我正在使用一个名为“WorkManager”的包来执行一些后台任务(更新用户位置)。 https://pub.dev/packages/workmanager

这是我的最高级别函数。

void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) {
    _HomeScreenState().updateUserLoc();

    return Future.value(true);
  });
}

这是我的 initstate,我在其中初始化了 WorkManager。

void initState() {
    super.initState();

    
    Workmanager.initialize(
      callbackDispatcher,
      isInDebugMode: true,
    );

    Workmanager.registerPeriodicTask(
      "1",
"h"
 
      frequency: Duration(minutes: 15),
    );

这是我的updateUserLoc()函数。

updateUserLoc() async {
    await GetusersLocation();

    GeoFirePoint point = geo.point(latitude: lat, longitude: long);
    _firestore.collection('locations').document(widget.userid).setData(
      {'position': point.data},
      merge: true, 
    );

    print("executing the updateUserLoc");
  }

这种方式行不通,

当我把“print(“执行updateUserLoc”);”放在函数下面时,它会被打印出来,但是放在上面时则不会。

我在这里做错了什么呢? 请帮忙解决。

1个回答

3

您需要正确地等待您的未来:

void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) async {
    await _HomeScreenState().updateUserLoc();

    return true;
  });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接