Line data Source code
1 : import 'package:flutter/foundation.dart';
2 :
3 : import 'constraints.dart';
4 : import 'events.dart';
5 : import 'task_trigger.dart';
6 : import 'worker.dart';
7 :
8 : /// A single task request for use with [NativeWorkManager.enqueueAll].
9 : ///
10 : /// Bundles all parameters needed to call `NativeWorkManager.enqueue` so that
11 : /// multiple tasks can be submitted in a single [NativeWorkManager.enqueueAll]
12 : /// call.
13 : ///
14 : /// ## Example
15 : ///
16 : /// ```dart
17 : /// final paths = ['/data/a.zip', '/data/b.zip'];
18 : /// final urls = ['https://cdn.example.com/a.zip',
19 : /// 'https://cdn.example.com/b.zip'];
20 : ///
21 : /// final results = await NativeWorkManager.enqueueAll([
22 : /// for (var i = 0; i < paths.length; i++)
23 : /// EnqueueRequest(
24 : /// taskId: 'dl-$i',
25 : /// trigger: TaskTrigger.oneTime(),
26 : /// worker: NativeWorker.httpDownload(url: urls[i], savePath: paths[i]),
27 : /// tag: 'batch-download',
28 : /// ),
29 : /// ]);
30 : ///
31 : /// final accepted = results.where((r) => r == ScheduleResult.accepted).length;
32 : /// print('$accepted / ${results.length} tasks accepted');
33 : /// ```
34 : @immutable
35 : class EnqueueRequest {
36 1 : const EnqueueRequest({
37 : required this.taskId,
38 : required this.trigger,
39 : required this.worker,
40 : this.constraints = const Constraints(),
41 : this.existingPolicy = ExistingTaskPolicy.replace,
42 : this.tag,
43 : });
44 :
45 : /// Unique identifier for this task.
46 : final String taskId;
47 :
48 : /// When to run the task.
49 : final TaskTrigger trigger;
50 :
51 : /// The worker implementation to execute.
52 : final Worker worker;
53 :
54 : /// Device constraints (network, battery, etc.).
55 : final Constraints constraints;
56 :
57 : /// What to do when a task with [taskId] already exists.
58 : final ExistingTaskPolicy existingPolicy;
59 :
60 : /// Optional tag for grouping (see [NativeWorkManager.cancelByTag]).
61 : final String? tag;
62 : }
|