如何在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
相关产品推荐
相关产品推荐

