You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WorkManager中执行任务?需在通知发送后执行后续函数

基于WorkManager实现定时通知与后续任务执行

我需要用WorkManager服务处理任务,核心目标是在指定时间发送通知,并且必须在通知发送完成后执行后续的数据库更新任务。以下是我的WorkManager实现代码:

class WorkServiceManager {
  late String id;
  void init() {
    Map<String, dynamic>? notificationDetails =
        Storage().box.read("notification_details");

    id = notificationDetails!['id'].toString();
    //final ReminderController reminderController = Get.find();
    Workmanager().initialize(
        actionTask, // 顶层函数,即回调调度器
        isInDebugMode:
            false // 启用后会在任务运行时发布通知,便于调试
        );
    Workmanager().registerPeriodicTask(
      id, "Show Notification_$id",
      inputData: notificationDetails,
      //initialDelay: const Duration(seconds: 15),
    );
    log("任务已注册,ID:$id");
  }
}

@pragma('vm:entry-point')
void actionTask() {
  Workmanager().executeTask((taskName, inputData) async {
    log(inputData?['name']);
    await LocalNotificationServices.showSchedualNotification(
      inputData?['id'],
      inputData?['name'],
      inputData?['describtion'],
      inputData?['reminderdate'],
      inputData?['remindertime'],
    );
    await performDatabaseUpdate(taskName);
    return Future.value(true);
  });
}

Future<void> performDatabaseUpdate(String tasknames) async {
  // 数据库更新逻辑
  String s = tasknames.split("_")[1];
  await Get.put(ReminderController()).updateReminderStatus(int.parse(s), false);
  await Workmanager().cancelByUniqueName(s);
  log("数据库已更新");
}

关键逻辑说明

  • 任务初始化:从本地存储读取通知配置详情,注册带唯一ID的周期性任务
  • 任务执行流程:先调用本地通知服务发送定时通知,等待通知发送完成后,执行数据库状态更新操作
  • 任务收尾:数据库更新完成后,取消当前任务,防止重复触发

内容的提问来源于stack exchange,提问作者Emad Younan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:26:31