Line data Source code
1 : import '../constraints.dart';
2 : import '../enqueue_request.dart';
3 : import '../events.dart';
4 : import '../native_work_manager.dart';
5 : import '../task_chain.dart';
6 : import '../task_graph.dart';
7 : import '../task_handler.dart';
8 : import '../task_trigger.dart';
9 : import '../worker.dart';
10 : import 'i_work_manager.dart';
11 :
12 : /// Production [IWorkManager] that delegates to [NativeWorkManager].
13 : ///
14 : /// Use this class as the real implementation in production code.
15 : /// Pass [FakeWorkManager] in tests instead.
16 : ///
17 : /// ## DI registration examples
18 : ///
19 : /// ### get_it
20 : /// ```dart
21 : /// GetIt.instance.registerLazySingleton<IWorkManager>(
22 : /// () => NativeWorkManagerClient(),
23 : /// );
24 : /// ```
25 : ///
26 : /// ### Riverpod
27 : /// ```dart
28 : /// final workManagerProvider = Provider<IWorkManager>(
29 : /// (ref) => NativeWorkManagerClient(),
30 : /// );
31 : /// ```
32 : ///
33 : /// ### Flutter InheritedWidget / Provider package
34 : /// ```dart
35 : /// Provider<IWorkManager>(
36 : /// create: (_) => NativeWorkManagerClient(),
37 : /// child: MyApp(),
38 : /// )
39 : /// ```
40 : class NativeWorkManagerClient implements IWorkManager {
41 0 : const NativeWorkManagerClient();
42 :
43 0 : @override
44 0 : Stream<TaskEvent> get events => NativeWorkManager.events;
45 :
46 0 : @override
47 0 : Stream<TaskProgress> get progress => NativeWorkManager.progress;
48 :
49 0 : @override
50 : Future<Map<String, TaskProgress>> getRunningProgress() =>
51 0 : NativeWorkManager.getRunningProgress();
52 :
53 0 : @override
54 : Future<TaskHandler> enqueue({
55 : required String taskId,
56 : required TaskTrigger trigger,
57 : required Worker worker,
58 : Constraints constraints = const Constraints(),
59 : ExistingTaskPolicy existingPolicy = ExistingTaskPolicy.replace,
60 : String? tag,
61 : }) =>
62 0 : NativeWorkManager.enqueue(
63 : taskId: taskId,
64 : trigger: trigger,
65 : worker: worker,
66 : constraints: constraints,
67 : existingPolicy: existingPolicy,
68 : tag: tag,
69 : );
70 :
71 0 : @override
72 : Future<List<TaskHandler>> enqueueAll(List<EnqueueRequest> requests) =>
73 0 : NativeWorkManager.enqueueAll(requests);
74 :
75 0 : @override
76 : TaskChainBuilder beginWith(TaskRequest task) =>
77 0 : NativeWorkManager.beginWith(task);
78 :
79 0 : @override
80 : Future<GraphExecution> enqueueGraph(TaskGraph graph) =>
81 0 : NativeWorkManager.enqueueGraph(graph);
82 :
83 0 : @override
84 : Future<void> cancel({required String taskId}) =>
85 0 : NativeWorkManager.cancel(taskId: taskId);
86 :
87 0 : @override
88 : Future<void> cancelByTag({required String tag}) =>
89 0 : NativeWorkManager.cancelByTag(tag: tag);
90 :
91 0 : @override
92 0 : Future<void> cancelAll() => NativeWorkManager.cancelAll();
93 :
94 0 : @override
95 : Future<void> pause({required String taskId}) =>
96 0 : NativeWorkManager.pause(taskId: taskId);
97 :
98 0 : @override
99 : Future<void> resume({required String taskId}) async =>
100 0 : NativeWorkManager.resume(taskId: taskId);
101 :
102 0 : @override
103 : Future<TaskStatus?> getTaskStatus({required String taskId}) =>
104 0 : NativeWorkManager.getTaskStatus(taskId: taskId);
105 :
106 0 : @override
107 : Future<TaskRecord?> getTaskRecord({required String taskId}) =>
108 0 : NativeWorkManager.getTaskRecord(taskId: taskId);
109 :
110 0 : @override
111 : Future<List<String>> getTasksByTag({required String tag}) =>
112 0 : NativeWorkManager.getTasksByTag(tag: tag);
113 :
114 0 : @override
115 0 : Future<List<String>> getAllTags() => NativeWorkManager.getAllTags();
116 :
117 0 : @override
118 0 : Future<List<TaskRecord>> allTasks() => NativeWorkManager.allTasks();
119 :
120 : /// No-op for the real client — [NativeWorkManager] is process-scoped.
121 0 : @override
122 : void dispose() {}
123 : }
|