import 'dart:async'; import 'package:fluttery/fluttery.dart'; abstract class Worker extends Service { Future spawn( String debugName, FutureOr Function() task, { void Function()? preTask, Duration? timeout, // per-job override }); /// Currently running jobs. List getActiveWorkers(); /// All known jobs (active + completed + failed), up to a capped history. List getAllWorkers(); /// Optional: get a single worker by id. WorkerInfo? getWorker(String id); /// Remove completed/failed jobs older than [maxAge] from history. void purge({Duration maxAge = const Duration(minutes: 30)}); } enum WorkerStatus { running, completed, failed, timedOut } class WorkerInfo { WorkerInfo({ required this.id, required this.name, required this.startedAt, required this.status, this.endedAt, this.error, this.stackTrace, }); final String id; final String name; final DateTime startedAt; final WorkerStatus status; final DateTime? endedAt; final Object? error; final StackTrace? stackTrace; Duration get duration => ((endedAt ?? DateTime.now()).difference(startedAt)); }