schedule static method
Future<void>
schedule(
- String name, {
- Duration? interval,
- CronSchedule? cron,
- Map<
String, dynamic> input = const {}, - TaskConstraints? constraints,
- RetryPolicy? retry,
- TaskPriority priority = TaskPriority.normal,
- Duration? initialDelay,
- List<
String> tags = const [], - TimeWindow? window,
Schedules a periodic task with optional cron expression and time window.
On Android, the interval must be at least 15 minutes. On iOS, the system controls actual timing (best-effort).
Supports cron expressions for complex scheduling and time windows to restrict execution to specific hours/days.
Example with interval:
await TaskFlow.schedule(
'syncData',
interval: Duration(hours: 1),
constraints: TaskConstraints(network: NetworkConstraint.unmetered),
);
Example with cron:
await TaskFlow.schedule(
'dailyReport',
cron: CronSchedule.daily(hour: 9), // Every day at 9am
);
Example with time window:
await TaskFlow.schedule(
'sync',
interval: Duration(hours: 1),
window: TimeWindow.offPeak, // Only 2am-5am
);
Implementation
static Future<void> schedule(
String name, {
Duration? interval,
CronSchedule? cron,
Map<String, dynamic> input = const {},
TaskConstraints? constraints,
RetryPolicy? retry,
TaskPriority priority = TaskPriority.normal,
Duration? initialDelay,
List<String> tags = const [],
TimeWindow? window,
}) async {
_ensureInitialized();
// Must have either interval or cron
if (interval == null && cron == null) {
throw ArgumentError('Must provide either interval or cron expression');
}
// Enforce 15-minute minimum for interval
if (interval != null && interval.inMinutes < 15) {
throw ArgumentError(
'Periodic task interval must be at least 15 minutes. Got: ${interval.inMinutes}min',
);
}
await TaskFlowPlatform.instance.schedule(
name: name,
intervalMs: interval?.inMilliseconds ?? 0,
input: input,
constraints: constraints?.toMap(),
retry: retry?.toMap(),
priority: priority.name,
);
}